计算方法上机实习题大作业(实验报告).pdf
《计算方法上机实习题大作业(实验报告).pdf》由会员分享,可在线阅读,更多相关《计算方法上机实习题大作业(实验报告).pdf(29页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、计算方法实验报告 班级:学号:姓名:成绩:1 舍入误差及稳定性 一、实验目的(1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;(2)通过上机计算,了解舍入误差所引起的数值不稳定性 二、实验内容 1、用两种不同的顺序计算1000021nn,分析其误差的变化 2、已知连分数101223/(./)nnafbbabaab,利用下面的算法计算f:11,inniiiadb dbd (1,2,.,0inn 0fd 写一程序,读入011,.,.,nnn b bb aa计算并打印f 3、给出一个有效的算法和一个无效的算法计算积分 1041nnxydxx (0,1,.,1n 4、设2211NNjSj
2、,已知其精确值为13112 21NN(1)编制按从大到小的顺序计算NS的程序(2)编制按从小到大的顺序计算NS的程序(3)按两种顺序分别计算10001000030000,SSS并指出有效位数 三、实验步骤、程序设计、实验结果及分析 1、用两种不同的顺序计算1000021nn,分析其误差的变化(1)实验步骤:分别从 110000 和从 100001 两种顺序进行计算,应包含的头文件有 stdio.h 和 math.h(2)程序设计:a.顺序计算#include#include void main()double sum=0;int n=1;while(1)sum=sum+(1/pow(n,2);
3、if(n%1000=0)printf(sun%d=%-30f,n,sum);if(n=10000)break;n+;printf(sum%d=%fn,n,sum);b.逆序计算#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=%fn,n,sum);(3)实验结果及分析:程序运行结果:a.顺序计算 b.逆序计算 结果分析:两种不同顺序计算结果是一样的,顺
4、序计算误差从一开始就很小,而逆序计算误差最开始十分大,后来结果正确。2、已知连分数101223/(./)nnafbbabaab,计算f:(1)实验步骤:利用 11,inniiiadb dbd (1,2,.,0inn,0fd,计算f(2)程序设计#include#include void main()int i=0,n;float a1024,b1024,d1024;printf(please input n,n=);scanf(%d,&n);printf(nplease input a1 to an:n);for(i=1;i=n;i+)printf(a%d=,i);scanf(%f,&ai);
5、printf(nplease input b0 to bn:n);for(i=0;i=0;i-)di=bi+ai+1/di+1;printf(nf=%fn,d0);(3)实验结果 程序运行结果:3、给出一个有效的算法和一个无效的算法计算积分 1041nnxydxx (0,1,.,1n (1)实 验 步 骤 利 用C 语言编写程序,分别使用数值稳定的和数值不稳定的计算公式所建立的递推公式进行计算。(2)程序设计#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
6、n=1,m=10;printf(有效算法输出结果:n);printf(y0=%-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(y10=%-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);(3)实验结果及分析
7、程序运行结果:结果分析:无效算法数值不稳定,误差造成的影响特别大 4、设2211NNjSj,已知其精确值为13112 21NN(1)实验步骤 先编程按从大到小的顺序计算NS的程序,再编程按从小到大的顺序计算NS的程序,然后按两种顺序分别计算10001000030000,SSS。(2)程序设计#include main()int N;double SN30000;SN30000=(3.0/2.0-1.0/30000.0-1/30001.0)/2.0;for(N=30000;N=2;N-)SNN-1=SNN-1.0/(N*N-1);printf(从大到小顺序计算:nSN1000=%fnSN1000
8、0=%fnSN30000=%fn,SN1000,SN10000,SN30000);SN2=(3.0/2-1.0/2.0-1/3.0)/2.0;for(N=3;N=30000;N+)SNN=SNN-1+1.0/(N*N-1);printf(从小到大顺序计算:nSN1000=%fnSN10000=%fnSN30000=%fn,SN1000,SN10000,SN30000);(3)实验结果及分析 程序运行结果:结果分析:不同顺序计算所得结果是一样的。四、总结 通过这次上机,学习了解了舍入误差在不同算法时对结果的影响不同,稳定的算法才能获得正确的结果。2 方程求根 一、实验目的(1)通过对二分法与牛顿
9、迭代法做编程练习和上机运算,进一步体会二分法和牛顿法的不同。(2)编写割线迭代法的程序,求非线性方程的解,并与牛顿迭代法作比较。二、实验内容 1、用牛顿法求下列方程的根(1)20 xxe(2)10 xxe (3)lg20 xx 2、编写割线法程序求解第一问的方程 三、实验步骤、程序设计、实验结果及分析 1、牛顿法(1)实验步骤 通过定义牛顿法求方程的子函数,用 main 函数调用子函数求根(2)程序设计#include#include typedef float(*p)(float);float ff1(float x)return x*x-exp(x);float ff2(float x)r
10、eturn 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(x0=%.4f,x1=%.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);if(k%3!=0)printf(n);pri
11、ntf(iteration times:%d,roots:%.4fn,k-2,n);return 0;main()printf(x*x-exp(x),n);answer(ff1);printf(x*exp(x)-1,n);answer(ff2);printf(lg(x)+x-2,n);answer(ff3);return 0;(3)实验结果及分析 2、割线法(1)程序设计#include#include float gexian(float,float);float f(float);main()int i,j;float x1=2.2;float x2=2,x3;scanf(%d,&i);i
12、f(i=1)printf(%f,x1);else if(i=2)printf(%f,x2);else for(j=3;j=i;j+)x3=gexian(x1,x2);x1=x2;x2=x3;printf(%f,gexian(x1,x2);float f(float x)return(x*x-exp(x);float gexian(float x1,float x2)return(x2-(f(x2)/(f(x2)-f(x1)*(x2-x1);(3)实验结果及分析 四、总结 了解和学习了二分法和牛顿迭代法的思想以及程序设计的方法,比较了迭代法和牛顿法的特点:牛顿法收敛速度较快,但对初值选取要求较高
13、;割线法计算量少。3 线性方程组数值解法 一、实验目的(1)熟悉求解线性方程组的有关理论和方法;(2)会编制列主元消去法,LU 分解法,雅可比及高斯-赛德尔迭代法的程序;(3)通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。二、实验内容 1、用列主元消去法解方程组 2、用 LU 分解法解方程组 三、实验步骤、程序设计、实验结果及分析 1、用列主元消去法解方程组(1)程序设计#include#include void ColPivot(float*,int,float);void ColPivot(float*c,int n,float x)int i,j,t,k;float p;
14、for(i=0;i=n-2;i+)k=i;for(j=i+1;j(fabs(*(c+k*(n+1)+i)k=j;if(k!=i)for(j=i;j=n;j+)p=*(c+i*(n+1)+j);*(c+i*(n+1)+j)=*(c+k*(n+1)+j);*(c+k*(n+1)+j)=p;for(j=i+1;j=n-1;j+)p=(*(c+j*(n+1)+i)/(*(c+i*(n+1)+i);for(t=i;t=0;i-)for(j=n-1;j=i+1;j-)(*(c+i*(n+1)+n)-=xj*(*(c+i*(n+1)+j);xi=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i);
15、void main()int i;float x4;float c45=1,1,0,3,4,2,1,-1,1,1,3,-1,-1,3,-3,-1,2,3,-1,4;ColPivot(c0,4,x);for(i=0;i=3;i+)printf(x%d=%fn,i,xi);(2)实验结果及分析 (1)题 (2)题 2、用 LU 分解法解方程组(1)程序设计#include void main()float x4;int i;float a45=48,-24,0,-12,4,-24,24,12,12,4,0,6,20,2,-2,-6,6,2,16,-2 ;void DirectLU(float*,i
16、nt,float);DirectLU(a0,4,x);for(i=0;i=3;i+)printf(x%d=%fn,i,xi);void DirectLU(float*u,int n,float x)int i,r,k;for(r=0;r=n-1;r+)for(i=r;r=n;i+)for(k=0;k=r-1;k+)*(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i);for(i=r+1;i=n-1;i+)for(k=0;k=0;i-)for(r=n-1;r=i+1;r-)*(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*xr;xi=*(u+i
17、*(n+1)+n)/(*(u+i*(n+1)+i);四、总结 掌握了用列主元消去法和 LU 分解法求解方程组程序编写的技巧。4 插值法 一、实验目的(1)熟悉拉格朗日插值法多项式和牛顿插值多项式,注意其不同点;(2)掌握三次样条插值解决一些实际问题。二、实验内容 1、按所给数据做二次插值,并求给定点的函数值 2、按所给数据做五次插值,并求给定点的函数值 3、牛顿前插公式计算函数值 三、实验步骤、程序设计、实验结果及分析 1、二次插值(1)程序设计#include float Lagrange(float x,float y,float xx,int n)/n 为(n+1)次插值;int i,j
18、;float*a,yy=0;a=new floatn;for(i=0;i=n-1;i+)ai=yi;for(j=0;j=n-1;j+)if(j!=i)ai*=(xx-xj)/(xi-xj);yy+=ai;delete a;return yy;void main()float x5=-3.0,-1.0,1.0,2.0,3.0;float y5=1.0,1.5,2.0,2.0,1.0;float xx1=-2,xx2=0,xx3=2.75,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,3);yy2=Lagrange(x,y,xx2,3);yy3=Lagrange(x,y,xx3
19、,3);printf(x1=%-20f,y1=%fn,xx1,yy1);printf(x2=%-20f,y2=%fn,xx2,yy2);printf(x3=%-20f,y3=%fn,xx3,yy3);(2)实验结果 2、五次插值(1)程序设计#include float Lagrange(float x,float y,float xx,int n)/n 为(n+1)次插值;int i,j;float*a,yy=0;a=new floatn;for(i=0;i=n-1;i+)ai=yi;for(j=0;j=n-1;j+)if(j!=i)ai*=(xx-xj)/(xi-xj);yy+=ai;de
20、lete a;return yy;void main()float x6=0.30,0.42,0.50,0.58,0.66,0.72;float y6=1.04403,1.08462,1.11803,1.15603,1.19817,1.23223;float xx1=0.46,xx2=0.55,xx3=0.60,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,6);yy2=Lagrange(x,y,xx2,6);yy3=Lagrange(x,y,xx3,6);printf(x1=%-20f,y1=%fn,xx1,yy1);printf(x2=%-20f,y2=%fn,xx2,
21、yy2);printf(x3=%-20f,y3=%fn,xx3,yy3);(2)实验结果 3、牛顿前插公式计算函数值(1)程序设计#include#define N 3 void Difference(float y,float f44,int n)int k,i;f00=y0;f10=y1;f20=y2;f30=y3;for(k=1;k=n;k+)for(i=0;i=(N-k);i+)fik=fi+1k-1-fik-1;return;void main()int i,k=1;float a,b=1,m=21.4,t=1.4,f44=0;float x5=20,21,22,23,24;floa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 上机 实习 作业 实验 报告
限制150内