收藏 分享(赏)

计算方法上机实习题大作业(实验报告).doc

上传人:精品资料 文档编号:10798030 上传时间:2020-01-10 格式:DOC 页数:29 大小:2.04MB
下载 相关 举报
计算方法上机实习题大作业(实验报告).doc_第1页
第1页 / 共29页
计算方法上机实习题大作业(实验报告).doc_第2页
第2页 / 共29页
计算方法上机实习题大作业(实验报告).doc_第3页
第3页 / 共29页
计算方法上机实习题大作业(实验报告).doc_第4页
第4页 / 共29页
计算方法上机实习题大作业(实验报告).doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、计算方法实验报告班级: 学号: 姓名: 成绩:1 舍入误差及稳定性一、实验目的(1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;(2)通过上机计算,了解舍入误差所引起的数值不稳定性二、实验内容1、用两种不同的顺序计算 ,分析其误差的变化102n2、已知连分数 ,利用下面的算法计算 :10123/(./)nafbbf1,iniadbd(,.,0n0fd写一程序,读入 计算并打印01,.,.,nnbaf3、给出一个有效的算法和一个无效的算法计算积分104nnxyd(,.)4、设 ,已知其精确值为2NjS1312N(1)编制按从大到小的顺序计算 的程序NS(2)编制按从小到大的顺序计算

2、 的程序(3)按两种顺序分别计算 并指出有效位数1030,三、实验步骤、程序设计、实验结果及分析1、用两种不同的顺序计算 ,分析其误差的变化102n(1)实验步骤:分别从 110000 和从 100001 两种顺序进行计算,应包含的头文件有 stdio.h 和math.h(2)程序设计:a.顺序计算#include#includevoid 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=

3、%fn“,n,sum);b.逆序计算#include#includevoid 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#includevoid main()int i=0,n;float a1024,b1024,d1024;printf(“please input n,n=“);scanf(“%d“,printf(“nplease input a1 to an:n“);for(i=1;i=0;i-)di=bi+ai+1/di+1;

4、printf(“nf=%fn“,d0);(3)实验结果程序运行结果:3、给出一个有效的算法和一个无效的算法计算积分104nnxyd(0,1.)(1)实验步骤利用 C 语言编写程序,分别使用数值稳定的和数值不稳定的计算公式所建立的递推公式进行计算。(2)程序设计#include#includemain()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(“y0=%-20f“,y_0);while(1)y_1=1.0/(4*n)+y_

5、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(mmain() 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

6、);printf(“从大到小顺序计算:nSN1000=%fnSN10000=%fnSN30000=%fn“,SN1000,SN10000,SN30000);SN2=(3.0/2-1.0/2.0-1/3.0)/2.0;for(N=3;N#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

7、;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)#includefloat gexian(float,float);float f(float);main()int i,j;float x1=2.2;float x2=2,x3;scanf(“%d“,if(i=1) printf(“%f“,x1);else if(i=2) printf(“%f“,x2);elsefor(j=3;j#includevoid ColPivot(float*,int,f

8、loat);void ColPivot(float*c,int n,float x)int i,j,t,k;float p;for(i=0;i(fabs(*(c+k*(n+1)+i)k=j;if(k!=i)for(j=i;j=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);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

9、,4,x);for(i=0;ivoid 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*,int,float);DirectLU(a0,4,x);for(i=0;i=0;i-)for(r=n-1;r=i+1;r-)*(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*xr;xi=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i);四、总结掌握了用列主元消去法和 LU 分解法求解方程组程序编写的技巧。4 插值法一、实

10、验目的(1)熟悉拉格朗日插值法多项式和牛顿插值多项式,注意其不同点;(2)掌握三次样条插值解决一些实际问题。二、实验内容1、按所给数据做二次插值,并求给定点的函数值2、按所给数据做五次插值,并求给定点的函数值3、牛顿前插公式计算函数值三、实验步骤、程序设计、实验结果及分析1、二次插值(1)程序设计#includefloat 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;ifloat Lagrange(float x,float y,float x

11、x,int n) /n 为( n+1)次插值;int i,j;float *a,yy=0;a=new floatn;for(i=0;i#define N 3void Difference(float y,float f44,int n)int k,i;f00=y0;f10=y1;f20=y2;f30=y3;for(k=1;k#includevoid main()int i;float a3;float x15=1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8;float y15=33.4,79.50,122.65,159.05,189.15,214.15,

12、238.65,252.50,267.55,280.50,296.65,301.40,310.40,318.15,325.15;void Approx(float,float,int,int,float);Approx(x,y,15,2,a);for(i=0;i(fabs(*(c+k*(n+1)+i)k=j;if(k!=i)for(j=i;j=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);float power(int i,float v)float a=

13、1;while(i-)a*=v;return a;(2)实验结果2、最小二乘拟合(1)程序设计#include#includevoid main()int i,n;float a2;float x15=1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,z15;float y15=33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,267.55,280.50,296.65,301.40,310.40,318.15,325.15;for(n=0;n(fabs(*(c+k*(n+1)+i)k=j;if(k!=

14、i)for(j=i;j=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);float power(int i,float v)float a=1;while(i-)a*=v;return a;(2)实验结果四、总结通过曲线拟合,最小二乘法的基本原理的学习,我学会了利用计算机解决现实实际问题中的曲线拟合。6 数值积分一、实验目的(1)通过实际计算体会各种方法的精确度;(2)会编写用龙贝格算法求定积分的程序。二、实验内容编写复化柯特斯求积分公式,并计算例题 1

15、例题 2,观察 n 为多少时有 6 位有效数字。三、程序设计、实验结果及分析(1)程序设计#include#includefloat Cotes(float(*f)(float),float a,float b,int n)int k;float c,c1=0,c2,c3,c4;float h=(b-a)/n;c2=(*f)(a+h/4);c3=(*f)(a+h/2);c4=(*f)(a+3*h/4);for(k=1;k#includefloat Cotes(float(*f)(float),float a,float b,int n)int k;float c,c1=0,c2,c3,c4;f

16、loat h=(b-a)/n;c2=(*f)(a+h/4);c3=(*f)(a+h/2);c4=(*f)(a+3*h/4);for(k=1;kvoid ModEuler(float(*f)(float,float),float x0,float y0,float xn,int n)int i;float yp,yc,x=x0,y=y0,h=(xn-x0)/n;printf(“x0=%fty0=%fn“,x,y);for(i=1;ivoid Runge_Kutta(float(*f)(float x,float y),float a,float b,float y0,int N)float x=

17、a,y=y0,K1,K2,K3,K4;float h=(b-a)/N;int i;printf(“x0=%fty0=%fn“,x,y);for(i=1;ivoid Runge_Kutta(float(*f)(float x,float y,float z),float (*g)(float x,float y,float z),float a,float b,float y0,float g0,int N)float x=a,y=y0,z=g0,K1,K2,K3,K4,l1,l2,l3,l4;float h=(b-a)/N;int i;printf(“x0=%fty10=%fty20=%fn“

18、,x,y,z);for(i=1;i=N;i+)K1=(*f)(x,y,z);l1=(*g)(x,y,z);K2=(*f)(x+h/2,y+h*K1/2,z+h*l1/2);l2=(*g)(x+h/2,y+h*K1/2,z+h*l1/2);K3=(*f)(x+h/2,y+h*K2/2,z+h*l2/2);l3=(*g)(x+h/2,y+h*K2/2,z+h*l2/2);K4=(*f)(x+h,y+h*K3,z+h*l3);l4=(*g)(x+h,y+h*K3,z+h*l3);y=y+h*(K1+2*K2+2*K3+K4)/6;z=z+h*(l1+2*l2+2*l3+l4)/6;x=a+i*h;p

19、rintf(“x%d=%fty%d=%ftz%d=%fn“,i,x,i,y,i,z);float f(float x,float y,float z)return 120-2*y+2*z; float g(float x,float y,float z)return 2*y-5*z; void main()float a=0,b=1.0,y0=0,g0=0;Runge_Kutta(f,g,a,b,y0,g0,10);(2)实验结果四、总结通过这次学习,我掌握了根据不同场合选择不同方法计算求解问题的方法,主要学习了改进欧拉法和四阶龙格- 库塔法求解微分方程的求解问题方法。计算方法上机总结:通过对

20、这门课的学习,我们学习了很多计算方程、曲线拟合、求解微分方程的方法。而实习课让我们将所学的原理应用到实践中去,上机编写程序的过程中我们不断的运用已学知识,掌握了求解各种实际问题的方法,并且体会了不同的方法的不同结果,从而在不同的场合,要用合适的计算方法来求解问题。我们求解的问题包括误差分析,线性方程组的求解,微分方程的求解等问题。在选择合适的计算方法的时候要考虑方法的收敛性,稳定性,以及哪种方法计算速度快,最终结果误差小。这门课与计算机密切结合并且实用性极强,能够将所学的知识在实践中得到应用,加强了我对专业学习的信心。参考文献:【1】孙志忠.计算方法典型例题分析.第二版.北京:科学出版社,2005【2】孙志忠,袁慰平,计算方法与实习.第二版.南京:东南大学出版社,2011【3】谭浩强.C 程序设计.第四版 .北京:清华大学出版社,2010

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报