计算方法与实习上机题答案

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

实习题1

1用两种不容的顺序计算

644834.11000

1

2

≈∑=-n n

,分析误差的变化

(1)顺序计算 源代码:

#include #include void main() { double sum=0; int n=1; while(1) { sum=sum+(1/pow(n,2)); if(n%1000==0)printf("sun[%d]=%-30f",n,sum); if(n>=10000)break; n++; } printf("sum[%d]=%f\n",n,sum); }

结果:

(2)逆序计算 源代码:

#include #include void main() { double sum=0; int n=10000; while(1) { sum=sum+(1/pow(n,2));

if(n%1000==0) printf("sum[%d]=%-30f",n,sum); if(n<=1)break; n --;

} printf("sum[%d]=%f\n",n,sum);

}

结果:

2已知连分数

))//(.../(322101

n n b a a b a b a b f ++++

=

利用下面的方法计算f:

1

1

)0,...,2,1(,d f n n i d a b d b d i i i i n n =--=+==++

写一个程序,读入n,n n b a ,,计算并打印f 源代码:

#include #include void main() { int i=0,n; float a[1024],b[1024],d[1024]; printf("please input n,n="); scanf("%d",&n); printf("\nplease input a[1] to a[n]:\n"); for(i=1;i<=n;i++) { printf("a[%d]=",i); scanf("%f",&a[i]);

} printf("\nplease input b[0] to b[n]:\n"); for(i=0;i<=n;i++) { printf("b[%d]=",i); scanf("%f",&b[i]); } d[n]=b[n]; for(i=n -1;i>=0;i --) d[i]=b[i]+a[i+1]/d[i+1]; printf("\nf=%f\n",d[0]); } 结果:

3给出一个有效的算法和一个无效的算法计算积分

⎰=+=10

)10,...1,0(14n dx x x y n n

源代码:

#include #include main() { double y_0=(1/4.0)*log(5),y_1; double y_2=(1.0/55.0+1.0/11.0)/2,y_3; int n=1,m=10; printf("有效算法输出结果:\n"); printf("y[0]=%-20f",y_0);

while(1) { y_1=1.0/(4*n)+y_0/(-4.0); printf("y[%d]=%-20f",n,y_1); if(n>=10) break; y_0=y_1; n++; if(n%3==0) printf("\n"); }

printf("\n 无效算法的输出结果:\n"); printf("y[10]=%-20f",y_2); while(1) { y_3=1.0/n -4.0*y_2; printf("y[%d]=%-20f",m -1,y_3); if(m<=1) break; y_2=y_3; m --; if(m%2==0) printf("\n"); }

}

结果:

4设∑

=-=

N

j N j S 2

211

,已知其精确值为

)1

1123(21+--N N (1)编制按从小到大顺序计算N S 的程序 (2)编制按从小达到的顺序计算N S 的程序

(3)按两种顺序分别计算30000100001000,,S S S ,并指出有效位数

源代码:

#include main() { int N; double SN[30000]; SN[30000]=(3.0/2.0-1.0/30000.0-1/30001.0)/2.0; for(N=30000;N>=2;N --) SN[N -1]=SN[N]-1.0/(N*N -1); printf("从大到小顺序计算:

\nSN[1000]=%f\nSN[10000]=%f\nSN[30000]=%f\n",SN[1000],SN[10000],SN[30000]); SN[2]=(3.0/2-1.0/2.0-1/3.0)/2.0; for(N=3;N<=30000;N++) SN[N]=SN[N -1]+1.0/(N*N -1); printf("从小到大顺序计算:

\nSN[1000]=%f\nSN[10000]=%f\nSN[30000]=%f\n",SN[1000],SN[10000],SN[30000]); } 结果:

实习题2 1.用牛顿法求下列方程的根

2=-x e x

01=-x xe 02lg =-+x x

源代码:

#include #include

typedef float (*p)(float ); float ff1(float x) { return x*x -exp(x); }

float ff2(float x) { return x*exp(x)-1; }

float ff3(float x) { return log(x)+x -2; }

float answer(float(*p)(float)) { int k=2; float m=1,n=-1,x2,a,b,c; if (p==ff3)n=2; printf("x[0] = %.4f, x[1] = %.4f, ",m,n); while (1) { if (fabs(m -n)<1e -4) break; a=p(n)*(n -m); b=p(n)-p(m); c=a/b; x2=n -c; m = n; n = x2; printf("x[%d] = %.4f, ",k,x2); k++; if (k%3==0) printf("\n"); }

相关文档
最新文档