数值分析实验报告.doc_第1页
数值分析实验报告.doc_第2页
数值分析实验报告.doc_第3页
数值分析实验报告.doc_第4页
数值分析实验报告.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数值分析实验报告学院:计算机科学与软件学院姓名:XXX班级:计算机XX班学号:XXXXXX实验一:舍入误差与数值稳定性实验目的:1、 通过上机编程,复习巩固以前所学程序设计语言;2、 通过上机计算,了解舍入误差所引起的数值不稳定性。3、 通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。 实验内容:用两种不同的顺序计算,分析其误差的变化。实验流程图: 实验源程序: #include #include void main() int i;float s1=0,s2=0,d1,d2;for (i=1;i=1;i-)s2=s2+1.0f/(i*i);d1=(float)(fabs(1.644834-s1); d2=(float)(fabs(1.644834-s2);printf(正向求和结果为%fn 误差为%fnn,s1,d1);printf(反向求和结果为%fn 误差为%fnn,s2,d2);if(d1d2)printf(正向求和误差小于负向求和误差n);else if(d1=d2)printf(正向求和误差等于负向求和误差n);else printf(正向求和误差大于负向求和误差n);实验结果:实验分析:第一次做数值实验,又一次使用C语言编程,没有了刚学习C语言的艰难,能够将实验步骤转换成流程图并编写出完整的实验代码,在经过多次调试、改正后得到正确的程序和结果。这个实验较简单,计算误差时如果输入数据有误差,而在计算过程中舍入误差不增长,则称此算法是稳定的,否则称此算法是数值不稳定的,减少运算次数可以减小舍入误差。在运算中,如果参加运算的数的数量级相差很大,而计算机位数有限,如不注意运算次序就可能出现大数“吃掉”小数的现象,进而影响计算结果的可靠性,所以计算过程中要注意运算次序,避免出现这种现象。实验二:拉格朗日插值法和牛顿插值法实验目的:分别用拉格朗日差值和牛顿插值解决数学问题,并比较各方法的优略。1、拉格朗日插值实验内容:按下列数据x-3.0-1.01.02.03.0y1.01.52.02.01.0作二次插值,并求x=-2,x=0,x=2.75时的函数近似值。实验流程图: 实验源程序:#include float lagrange(int,float,float,float);void main()float a,x50,y50,l;int m,n;printf(题目:按下列数据n); printf(x:-3.0 -1.0 1.0 2.0 3.0n);printf(y:1.0 1.5 2.0 2.0 1.0n);printf(作二次插值,并求x=-2,x=0,x=2.75时的函数近似值.nn);printf(输入插值次数:);scanf(%d,&n);printf(输入计算次数:);scanf(%d,&m);for(int i=0;i=m;i+)for (int j=0;j=n;j+)printf(输入要计算的第%d个数的第%d个节点及其函数值:,i+1,j+1);scanf(%f,%f,&xj,&yj);printf(输入要计算的x的值:);scanf(%f,&a);l=lagrange(n,a,x,y);printf(%fn,l); float lagrange(int n,float a,float x,float y) float l=0,w; int i,j; for (i=0;i=n;i+) w=1; for(j=0;j=n;j+) if(i!=j) w=w*(a-xj)/(xi-xj); l=l+w*yi; return l; 实验结果:2、牛顿插值实验内容:按下列数据x0.300.420.500.580.660.72y1.044031.084621.118031.156031.198171.23223作五次插值,并求x=0.46,x=0.55,x=0.60时的函数近似值。实验源程序:#include#define M 6float w(float X,int n,float x);float quotient(int k,int i,float fM,float x,float y);float newton(float X,int n,float fM,float x,float y);void main()float xM,yM,fMM;x0=0.30f;y0=1.04403f;x1=0.42f;y1=1.08462f;x2=0.50f;y2=1.11803f;x3=0.58f;y3=1.15603f;x4=0.66f;y4=1.19817f;x5=0.72f;y5=1.23223f;printf(x:0.30 0.42 0.50 0.58 0.66 0.72n);printf(y:1.04403 1.08462 1.11803 1.15603 1.19817 1.23223n);printf(做五次插值,并求x=0.46,x=0.55,x=0.60时的函数近似值.nn);for(int i=0;iM;i+)f0i=yi;float N3;N0=newton(0.46f,5,f,x,y);N1=newton(0.55f,5,f,x,y);N2=newton(0.60f,5,f,x,y);printf(x=0.46时函数的近似值为 %fn,N0);printf(x=0.55时函数的近似值为 %fn,N1);printf(x=0.60时函数的近似值为 %fn,N2);float w(float X,int n,float x)float w=1.0;for (int i=0;in;i+)w=w*(X-xi);return w; float quotient(int k,int i,float fM,float x,float y)if(k=0)f0i=yi;else fki=(quotient(k-1,i,f,x,y)-quotient(k-1,i-1,f,x,y)/(xi-xi-k);return fki; float newton(float X,int n,float fM,float x,float y) float N; N=f00; for (int i=1;i=n;i+) N=N+w(X,i,x)*quotient(i,i,f,x,y); return N; 实验结果:实验分析:拉格朗日插值法和牛顿插值法用拉格朗日插值多项式计算函数近似值时,如需增加插值节点,那么原来算出的数据均不能利用,必须重新计算。用牛顿差商插值多项式中各阶差商用相应查分代替,就可得到各种形式的等距节点插值公式。牛顿插值法比拉格朗日插值法节省计算量,且便于程序设计,计算增加节点时,计算只需要增加一项,而且牛顿插值更容易计算高次插值。实验三:复化积分法实验目的:学会用复化积分法提高求积的精度,熟记并掌握复化梯形和复化辛卜生公式。实验内容:分别用复化梯形公式和复化辛卜生公式计算f(x)=sin(x)/x的积分,并与准确值比较判断精度。实验流程图: 实验源程序:#include #include void main() int m,n,k,i;float Tn,Sn,d1,d2,a=0,b=0,c=0; float x1000,y1000,z1000,w1000; printf(将复化梯形区间划分:); scanf(%d,&n); for(i=1;in;i+) xi=float(1.0/n*i);yi=(float)(sin(xi)/xi);a=a+yi;Tn=(float)(1.0+sin(1.0)/1.0+2*a)/2.0/n);printf(复化梯形输出:%fn,Tn); printf(将复化辛卜生区间划分为:); scanf(%d,&m); for (k=1;kd2)printf(复化梯形求法精度低于复化辛卜生求法n);else if (d1=d2)printf(复化梯形求法精度等于复化辛卜生求法n);else (d1d2);printf(复化梯形求法精度高于复化辛卜生求法n); 实验结果:实验分析:许多实际问题常常需要计算积分才能求解,梯形公式、牛顿-柯特斯公式和辛卜生公式是常用的求积公式,为避免可选取适当多的节点,即选取相对高阶的牛顿-柯特斯公式,但由稳定性分析可知,高次插值会产生龙格现象,故采用分段低次插值,然后利用积分的区间可加性得积分,即所谓的分段低次合成的复化求积公式。复化求积法能改善求积精度,复化的梯形法和辛卜生法当步长h0时,均收敛到所求的积分值。若将步长h减半(即等分数n加倍),则梯形法、辛卜生法和牛顿-柯特斯法的误差分别减至原有误差的1/ 4、1/16和1/64。实验四:改进欧拉方法解初值问题实验目的:学会用改进的欧拉公式求解初值。实验内容:用改进欧拉方法解初值问题y=x+y; y(0)=1。0x1,取步长h=0.1计算,并与准确值 y=-x-1-2ex相比较。实验流程图: 实验源程序:#include#include#define MAX 50void main()double a=0,b=1,h=0.1,y_p,y_c,xMAX,yMAX,zMAX;int n,i;n=int(b-a)/h);x0=0;y0=1;z0=-x0-1+2*exp(x0);for(i=0;in;i+)xi+1=xi+h;y_p=yi+h*(xi+yi);y_c=yi+h*(xi+1+y_p);yi+1=(y_p+y_c)/2;zi+1=-xi+1-1+2*exp(xi+1);printf(X的值t欧拉方法求得的解;t准确解ttt误差为n);for(i=0;i=n;i+)printf(%.1ft%ftt%ftt%fn,xi,yi,zi,zi-yi);实验结果:实验分析:这个实验主要利用常微分方程求解,常微分方程的初值问题的数值解法的特点是:都采用步进式,即求数值解是按节点的顺序逐步推进求得y0,y1,yn 。这类算法,关键在于建立从已知信息y0,y1, yi 计算yi+1的递推公式。其中梯形公式虽然提高了精度,但其算法复杂,在应用迭代公式进行实际计算时,每迭代一次,都要重新计算函数f的值,计算量很大,而且往往难以预测,所以用改进欧拉公式,先用欧拉公式求得一个初步的近似值,再用梯形公式将它校正一次。这样建立的预测-校正系统通常称为改进的欧拉公式。设计计算方案有六个环节:预测、改进、计算、校正、改进、计算。实验五 二分法、简单迭代法、牛顿迭代法实验目的:比较迭代法,二分法和牛顿迭代法计算方程的根的准确度。实验内容:分别用下列方法求f(x)=x3-3x-1=0在x0=2附近的根。根的准确值为x*=1.87938524,要求准确到四位有效数字,并对比各种算法的计算量。(1) 二分法;(2)简单迭代法;(3)牛顿迭代法实验流程图: 实验源程序:#include#includevoid ERFENFA()double x0,x1=1.0,x2=2.0,fx0,fx1,fx2;int count=0;fx1=x1*x1*x1-3*x1-1;fx2=x2*x2*x2-3*x2-1;dox0=(x1+x2)/2;fx0=x0*x0*x0-3*x0-1;if(fx0=0)printf(失败);break;if(fx0*fx15e-4);printf(二分法求方程的根为x=%fn共二分了%d次n,x0,count);void DIEDAIFA()double x0,x1=2.0;int count=0;dox0=x1;x1=exp(log(3*x0+1)/3);count+;while(fabs(x1-x0)5e-4);printf(简单迭代法求方程的根为x=%fn共迭代了%d次n,x1,count);void Newton()double x1,x2=2.0,f1,f2;int count=0;dox1=x2;f1=x1*x1*x1-3*x1-1;f2=3*x1*x1-3;x2=x1-f1/f2;count+;while(fabs(x1-x2)5e-4);printf(牛顿迭代法求方程的根为x=%fn共迭代了%d次n,x2,count);void main()ERFENFA();DIEDAIFA();Newton();实验结果:实验分析:二分法、迭代法和牛顿迭代法都是方程求根的常用方法,二分法是逐步搜索方法的一种改进,在有根区间a,b上无限地进行二分过程,这些区间最终必将收缩于一点,该点就是所求的根。迭代法是一种逐次逼近法,其基本思想是将隐式方程归结为一组显式的计算公式,就是说,迭代过程实质上就是一个逐步显式化的过程。牛顿迭代法可以加速迭代速度。总的来说,二分法算法简单,易于操作,但是精度较低,计算量大;简单迭代法精度较二分法有所提高但在迭代时需要选择合适的迭代公式,以得到较快的收敛速度;牛顿迭代法精度最高,计算量小,但需要保证在迭代过程中分母不能为零。实验六 高斯列主元消去法和直接三角分解法(LU分解)实验目的:了解解线性方程组的直接法,掌握直接三角分解法求解方程组的解。实验内容:用直接三角分解法(LU分解)求方程组的解系数矩阵:10 7 8 7 常向量:10 7 5 6 5 8 8 6 10 9 6 7 5 9 10 7精确解为:(-60,102,-27,16)实验流程图:实验源程序:#include#include#define MAX 10void main()double A45=10,7,8,7,10,7,5,6,5,8,8,6,10,9,6,7,5,9,10,7;double s,t,detA,max;int i,j,k,m,n=4;detA=1;/消元计算for(k=0;kn-1;k+)max= fabs(Akk);m=k;for(i=k+1;imax)max=fabs(Aik);m=i;if(max=0)detA=0;break;if(k!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论