计算物理课后部分习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五题

/*计算物理作业 3.5题

*学号:20092200129

*/

程序:

public class sun {

public static void main(String argv[]){

double del=1e-6;

int n=10,m=10;

double h=Math.PI/(2*n);

//Evaluate the derivative and output the result

int k=0;

for(int i=0;i<=n;++i){

double x=h*i;

double d=(f(x+h)-2*f(x)+f(x-h))/(h*h);

double f2=firstOrderDerivative3(x,h,d,del,k,m);

double df2=f2-O(x,f2);

System.out.println("x="+x);

System.out.println(" f"(x)="+f2);

System.out.println("Error in f"(x):"+df2);

System.out.println();

System.out.println();

}

}

//Method to carry out 2st-order derivative throuth the adaptive scheme.

public static double firstOrderDerivative3(double x,double h,double

d,double del,int step,int maxstep){

step++;

h=h/2;

double d2=(f(x+h)-2*f(x)+f(x-h))/(h*h);

if(step>=maxstep){

System.out.println("Not converged after"+step+"recursions");

return d2;

}

else{

if((h*h*Math.abs(d-d2))

return(4*d2-d)/3;

else return firstOrderDerivative3(x,h,d2,del,step,maxstep);

}

}

public static double f(double x){

return Math.exp(-x)*Math.log(x);

}

public static double O(double x,double f2){

return

Math.exp(-x)*Math.log(x)-(2*Math.exp(-x))/x-Math.exp(-x)/(x*x);

}

}

运行结果:

Not converged after10recursions

x=0.0

f"(x)=NaN

Error in f"(x):NaN

x=0.15707963267948966

f"(x)=-47.10058585750553

Error in f"(x):3.329329885559673E-6

x=0.3141592653589793

f"(x)=-12.896114166464196

Error in f"(x):8.610592701074893E-7

x=0.47123889803846897

f"(x)=-5.929972627646059

Error in f"(x):1.254731920141694E-6

x=0.6283185307179586

f"(x)=-3.2974024228908525

Error in f"(x):2.3189374909193816E-7

x=0.7853981633974483

f"(x)=-2.010313400857776

Error in f"(x):1.0145469402367269E-6

x=0.9424777960769379

f"(x)=-1.2886478977422928

Error in f"(x):3.5448832647055895E-7

x=1.0995574287564276

f"(x)=-0.8495690372991292

Error in f"(x):1.4696104200240256E-7

x=1.2566370614359172

f"(x)=-0.568185223209793

Error in f"(x):6.901975246886849E-8

x=1.413716694115407

f"(x)=-0.38160076561659223

Error in f"(x):3.562357669961713E-8

x=1.5707963267948966

f"(x)=-0.25505577758216

Error in f"(x):3.170312274369813E-7

第六题

解题思路:

首先定义主函数,计算出x[i],f[i],然后调用两个子函数,两个子函数分别计算泰勒展开式求最后一项的结果和辛普森方法求得last slice的结果。

对于两个子函数来书直接用last=h*(5*y[n]+8*y[n-1]-y[n-2])/12

即可求得辛普森算法的最后一个的结果

而泰勒方法中最后一项等于=h*h*f(x0)的一阶导数/2+h*f[n-1]+h*h*h*f(x0)的二阶导数/二的阶乘。

对于f(x0)的一阶和二阶导数则由另外两个子程序分别计算

一阶导数=c[i]=(y[i+1]-y[i-1])/(2*h);

二阶导数c[i]=(y[i+1]-2*y[i]+y[i-1])/(h*h);

将所得值比较即可。

源程序:

import ng.*;

public class n2 {

static final int n=9;

public static void main (String argv[]){

double f[]= new double[n+1];

double h=Math.PI/(2.0*n);//定义均匀间隔

相关文档
最新文档