河北工业大学2014数值分析实验报告_第1页
河北工业大学2014数值分析实验报告_第2页
免费预览已结束,剩余20页可下载查看

下载本文档

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

文档简介

1、河北工业大学数值分析2014实验报告学院:计算机科学与软件学院班级:姓名:学号:目录实验一1实验二3实验三6实验四9实验五10实验六13实验1. 实验名称用两种不同的顺序计算n-2沁1.644834,分析其误差的变化。n二12. 实验目的(1)深刻理解舍入误差所引起的数值的不稳定性。(2)理解利用计算机进行数值计算中舍入误差所引起的数值不稳定性。(3)理解初始小的舍入误差可能造成误差累积,从而对计算结果造成巨大影响。(4)理解对同一问题采用不同的算法,由于舍入误差的影响,也可能得到截然不同的结果。3. 算法描述(1)用float精度正序相加得到10000项的和(2)用float精度逆序相加得到

2、10000项的和(3)用double精度正序相加得到10000项的和(4)用double精度逆序相加得到10000项的和(5)根据结果分析并比较问题4. 源程序#includemain()floati,s1,s2,n;doubles3,s4;s1=0;s2=0;s3=0;s4=0;for(i=1;i=1;i-)n=i*i;n=1/n;s2=s2+n;printf(用float精度倒序相加结果为:%fn,s2);n=0;for(i=1;i=1;i-)n=i*i;n=1/n;s4=s4+n;printf(用double精度倒序相加结果为:fn,s4);5. 运行结果coritirme.tokeyI

3、Idiiy4JfloatAfloatpilAiihldcubl艮为:1.644725肋:1.644834里):1.644834果为=1.644834nHHRdt4J.6.编程体会舍入误差会引起数值计算的不稳定性。舍入误差对于计算结果精确度影响小的算法具有较好的稳定性;然而对于计算结果精确度影响大的算法,则会产生误差的积累。就本实验来说,分别使用float型还有double型算法,由于小数点后保留的位数比较多,并没有出现太大的误差,也避免了大数吃小数的现象。我在计算机上运用int类型也计算了一下,发现正序倒序结果都是1,这就说明由于舍入误差的累积,带来了计算的不稳定性。因此运用计算机解决问题的时

4、候要采用合适的算法,才能得到更期望的结果。实验1. 实验名称1拉格朗日插值按下列数据xi-3.0-1.01.02.03.0yi1.01.52.02.01.0作二次插值,并求x=-2,x=0,x=2.75时的函数近似值1232牛顿插值按下列数据xi0.300.420.500.580.660.72yi1.044031.084621.118031.156031.198171.23223作五次插值,并求x=0.46,x=0.55,x=0.60时的函数近似值。1232. 实验目的(1)了解拉格朗日插值和牛顿插值的计算方法。(2)比较两种算法并分析优点。3. 算法描述1拉格朗日插值1)从五个点中选取三个点

5、作为已知点2)由选出的三个点根据拉格朗日公式求出对应的系数L0,L1,L2;3)将所得系数代入公式,计算结果。2牛顿插值1)根据所给的六组数据代入,分别求其对应的差商;2)将对应求出的系数a0,a1,a2,a3,a4,a5代入公式;3)将所求数据代入,计算结果。4. 源程序1.拉格朗日插值#includemain()charb;floatx50,y50,t50,q50,s,p;inti,j,k,n,m;printf(您选择的是拉格朗日插值:n);printf(题目:按下列数据n);printf(x:-3.0-1.01.02.03.0n);printf(y:1.01.52.02.01.0n);p

6、rintf(作二次插值,并求x=-2,x=0,x=2.75时的函数近似值。nn);printf(请输入插值次数:);scanf(%d,&n);for(i=0;i=n;i+)printf(请输入第d个节点:,i+l);scanf(%f,%f,&xi,&yi);te1:printf(请输入要求的X的个数:);scanf(%d,&k);for(m=0;mk;m+)printf(“请输入x%d:,m+l);scanf(%f,&tm);for(m=0;mk;m+)s=0;for(i=0;i=n;i+)p=1;for(j=0;j=n;j+)if(i!=j)p=p*(tm-xj)/(xi-xj);s=s+p

7、*yi;qm=s;for(m=0;mk;m+)printf(Y%d的值为:%fn,m+1,qm);2牛顿插值#includemain()floatx50,y5050,q50,t50,a,s,p;inti,j,n,m,k;printf(您选择的是牛顿插值:n);printf(题目:按下列数据n);printf(x:0.300.420.500.580.660.72n);printf(y:1.044031.084621.118031.156031.198171.23223n);printf(作五次插值,并求x=0.46,x=0.55,x=0.60时的函数近似值。nn);printf(请输入插值的结点

8、个数:);scanf(%d,&k);for(i=0;ik;i+)printf(请输入第%d个节点:,i+l);scanf(%f,%f,&xi,&y0i);for(n=l;nk;n+)for(i=n;ik;i+)yni=(yn-1i-yn-1i-1)/(xi-xi-n);printf(请输入要求的X的个数:);scanf(%d,&j);for(i=0;ij;i+)printf(请输入x%d:,i+l);scanf(%f,&ti);for(m=0;mj;m+)s=0;for(n=1;nk;n+)p=1;for(i=0;in;i+)a=tm-xi;p=p*a;p=p*ynn;s=s+p;qm=s+y

9、00;for(i=0;i甌选择的是牛顿洁值题耳按下列数II0.306,420.0O.EG0.E66.72F;1.04403l.S4E21.118B31-15t031.198171.23223恫五次插值,并求x=e-46rx=e-EEjx=0-6时的函数近似億iL插值的结点个数503町1初中!阳6.42.1.084620Sffl11科US058,11石矗矽30.66,119817LA要求的掘的个数卩3S.466.55S.6S1.1007241.141270l.lfcfcl95LW:吃的总的veEEmn卯Ice卯tocontinue认心:6. 编程体会两种方法都是通过先构造插值函数然后再计算求解。

10、通过实验发现牛顿插值比拉格朗日插值的精度要高。拉格朗日插值是通过对n+1个n次基本多项式线性组合得到的,而牛顿插值法是通过求各阶差商,递推得到的。用拉格朗日插值多项式计算函数近似值时,如需增加插值节点,那么原来算出的数据均不能利用,必须重新计算。牛顿插值法比拉格朗日插值法节省计算量,且便于程序设计,计算增加节点时,计算只需要增加一项,并且牛顿插值更容易计算高次插值。1. 实验名称分别用复化梯形公式和复化辛卜生公式计算f(x)=sin(x)/x的积分,并与准确值比较判断精度。2. 实验目的(1) 通过实际计算掌握复化梯形和复化辛卜生求积公式。(2) 比较复化梯形和复化辛卜生求积公式的计算精确。3

11、. 算法描述1) 输入积分的上下限2) 输入划分区间的个数3) 让计算机计算步长h=(b-a)/n4)带入复化公式计算结果4. 源程序#include#include#include#defineI0.9460831main()intn1,n2,k;floata,b,h1,h2,d1,d2;doublet1=0,t2=0,p=0,T=0,S=0;printf(请输入积分下限a=);scanf(%f,&a);printf(请输入积分上限b=);scanf(%f,&b);if(a=b)printf(积分上下限相等,定积分的值为0n);exit(0);printf(请输入梯形公式划分区间的个数n1=

12、);scanf(%d,&n1);printf(请输入辛卜生公式划分区间的个数n2=);scanf(%d,&n2);h1=(b-a)/n1;h2=(b-a)/n2;printf(“梯形公式步长hl=%fn,hl);printf(“辛卜生公式步长h2=%fn,h2);for(k=1;kn1;k+)t1+=sin(a+k*h1)/(a+k*h1);for(k=1;kn2;k+)t2+=sin(a+k*h2)/(a+k*h2);for(k=0;kn2;k+)p+=sin(a+(2*k+1)*h2/2)/(a+(2*k+1)*h2/2);if(a=0)T=(1+2*t1+sin(b)/b)/2*h1;S

13、=(1+2*t2+4*p+sin(b)/b)/6*h2;elseif(b=0)T=(sin(a)/a+2*t1+1)/2*h1;S=(sin(a)/a+2*t2+4*p+1)/6*h2;elseT=(sin(a)/a+2*t1+sin(b)/b)/2*h1;S=(sin(a)/a+2*t2+4*p+sin(b)/b)/6*h2;printf(“复化梯形公式T=%fn,T);printf(“复化辛普森公式S=%fn,S);printf(准确值I=%fn,I);d1=fabs(I-T);d2=fabs(I-S);printf(“复化梯形公式的误差d=%fn,dl);printf(“复化辛卜生公式的

14、误差d=%fn,d2);if(dld2)printf(复化梯形公式的精度高于复化辛卜生公式的精度n);elseif(d1=d2)printf(复化辛卜生公式和复化梯形公式的精度相等n);elseprintf(复化辛卜生公式的精度高于复化梯形公式的精度n);5. 运行结果1=卡=了:!na=b=+TI弓電責cnC豎乍to限辰弍AJIlwT-弍爭弍4匸公匕長苏式:益式食益專式公薜土生II/6. 编程体会高次插值会产生龙格现象,故采用分段低次插值,然后利用积分的区间可加性得积分,即所谓的分段低次合成的复化求积公式。复化求积法能改善求积精度。通过编程,我体会到复化辛卜生公式的代数精度要高于复化梯形公式

15、,复化辛卜生公式的计算结果与准确值更接近。因此,实际应用中应采用复化辛卜生公式计算积分,可以得到与准确值更接近的近似值。编程中要注意的问题:(1)这里要注意讨论a二0或者b=0或者a=b的情况,因为公式中有sinx/x,不讨论a、b为0的情况可能会出现越界。(2)复化公式中有求和符号,写for循环就可以解决,要特别注意循环的次数。实验四1. 实验名称用改进欧拉方法解初值问题y二x+y;y(O)=l。0x1,取步长h=0.1计算,并与准确值y=-x-1-2ex相比较。2. 实验目的(1) 掌握改进欧拉公式,并熟练应用。(2) 利用改进欧拉公式求解常微分方程的初值问题,并与准确值比较结果。3. 算

16、法描述(1) yp=yi+h*f(xi,yi)(2) yc=yi+h*f(xi+1,yp)(3) yi+1=(yp+yc)/24. 源程序#include#includevoidmain()inti;floatyp,yc,y=1,h,x=0;printf(请输入步长h=);scanf(%f,&h);for(i=0;i10;i+)x=h*i;yp=y+h*(x+y);yc=y+h*(x+h+yp);y=(yp+yc)/2;printf(“实验值y(%0.1f)=%fn,h*(i+1),y);printf(精确值y(%0.1f)=%fn,h*(i+1),-h*(i+1)-1+2*exp(h*(i+

17、1);5. 运行结果itagIBfil蠶蠶蠶6. 编程体会改进欧拉法首先运用欧拉法求出预测值然后再利用梯形公式进行校正,每迭代一次就校正一次,这样建立的预测-校正系统通常称为改进的欧拉公式,有效的提高了计算精度。设计计算方案主要包括六个环节:预测、改进、计算、校正、改进、计算。编程的时候要注意用平均化形式来表示改进欧拉公式,更易于机器操实验五1. 实验名称分别用下列方法求f(x)=X3-3x-1=0在x0=2附近的根。根的准确值为x*=1.87938524.,要求准确到四位有效数字,并对比各种算法的计算量。(1)二分法(2)简单迭代法(3)牛顿迭代法2. 实验目的(1)掌握二分法、简单迭代法和

18、牛顿迭代法。(2)比较三种方法的特点、计算精度及计算量。3. 算法描述1.二分法(1) 准备计算f(x)在有根区间a,b端点处的值f(a),f(b).(2) 二分计算f(a)在区间中点(a+b)/2处的值f(a+b)/2。(3) 判断若f(a+b)/2=0,则(a+b)/2为根,计算结果结束,否则检验;若f(a+b)/20,则以(a+b)/2代替b,否则替代a.(4) 反复执行步骤二和步骤三,直到区间的长度小于允许误差,此时的中点即为所求。2. 简单迭代法(1) 将方程改写成等价的形式,即变为迭代函数。(2) 代入一个初始近似值X0,反复进行多次迭代求出其根。3. 牛顿迭代法(1) 准备选定初

19、始近似值X0,并计算其函数值,及其对应的导数;(2) 迭代按公式X1=XO-fO/fO/迭代一次,得到新的近似值X1,并求其函数值,及其相对应的导数值;(3) 控制如果X1满足所需的误差,则终止迭代,即X1为所求的根,否则转步骤四;(4) 修改如果迭代次数预先达到指定的次数N,则此方法失败,否则转步骤二继续迭代。4. 源程序#include#includevoidfun1()doublex0,x1=1.0,x2=2.0,fx0,fx1,fx2;intcount=0;fx1=x1*x1*x1-3*x1-1;fx2=x2*x2*x2-3*x2-1;dox0=(x1+x2)/2;printf(“第小

20、个二分点为fn,count+l,xO);fx0=x0*x0*x0-3*x0-1;if(fx0=0)printf(“失败);break;if(fx0*fx15e-4);printf(“共迭代了d次n,count);voidfun2()doublex0,x1=2.0;intcount=0;dox0=x1;x1=exp(log(3*x0+1)/3);count+;while(fabs(x1-x0)5e-4);printf(“简单迭代法x=%fn共迭代了d次n,xl,count);voidfun3()doublex1,x2=2.0,f1,f2;intcount=0;dox1=x2;f1=x1*x1*x

21、1-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);voidmain()fun1();fun2();fun3();5. 运行结果6. 编程体会(1)二分法是逐步搜索方法的一种改进,在有根区间a,b上无限地进行二分过程,这些区间最终必将收缩于一点,该点就是所求的根。(2)简单迭代法是一种逐次逼近法,其基本思想是将隐式方程归结为一组显式的计算公式,迭代过程实质上就是一个逐步显式化的过程,并且不好的迭代公式可能造成最后得不到计算结果。(3)牛顿迭代法是将

22、非线性方程逐步化为线性方程来求解,可以加速迭代速度。但是牛顿迭代法依赖于初始值X。的选取,如果X。距离准确值接近,则迭代次数少,如果距离准确值远,则迭代次数很多。并且,如果方程有两个跟,不同的初始值可能最终会收敛到别的根。(4) 总的来说,二分法算法简单,易于操作,但是精度较低,计算量大;简单迭代法精度较二分法有所提高但在迭代时需要选择合适的迭代公式,以得到较快的收敛速度;牛顿迭代法精度最高,计算量小,但是初始值的选取很重要。实验六1. 实验名称分别用高斯列主元消去法和直接三角分解法(LU分解)求方程组的解系数矩阵:1。787常向量:1。75658861。967591。7精确解为:(-6。,1

23、。2,-27,16)2. 实验目的(1)掌握高斯列主元消去法和直接三角分解法(LU分解)求方程组解的方法(2)比较高斯列主元消去法和直接三角分解法的特点3. 算法描述1高斯列主元消去法(以4阶为例)第1步消元一一在增广矩阵(A,b)第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(A,b)做初等行变换使原方程组转化为如下形式V10+*卜0冷*冷*第2步消元一一在增广矩阵(A,b)中的第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为冲卓卑E本0甲常來00芈眾00畔半严一半-第3步消元一一在增广矩阵(A,b)中的第三列中(从

24、第三行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为*o*农电一匕00*000*屮按x4-x3fx2fx1的顺序回代求解出方程组的解。2.直接三角分解法将高斯消去法改写成紧凑的形式,可以直接从矩阵A的元素得到计算L,U元素的递推公式,而不需要任何中间步骤,这就是所谓的直接三角分解法。一旦实现了矩阵A的LU分解,那么求解AX=b的问题就是等价于求解两个三角形方程组。(1) Ly=b,求y(2) Ux=y,求x4. 源程序1.高斯消元法#includevoidmain()floata44=10,7,8,7,7,5,6,5,8,6,10,9,7,5,9

25、,10,y4,c44,x4,d4,m,b;inti,n,j,f;printf(请输入右端顶:n);for(i=0;i=3;i+)scanf(%f,&yi);for(n=0;n=2;n+)m=ann;f=n;for(i=(n+1);i=3;i+)if(main)m=ain;f=i;if(f!=n)for(j=0;j=3;j+)cnj=anj;anj=afj;afj=cnj;dn=yn;yn=yf;yf=dn;for(i=(n+1);i=3;i+)b=-aij/ann;for(j=0;j=3;j+)aij=anj*b+aij;yi=yn*b+yi;x3=y3/a33;x2=(y2-a23*x3)/a22;x1=(y1-a13*x3-a12*x2)/a11;x0=(y0-a03*x3-a02*x2-a01*x1)/a00;printf(x1的值为fnx2的值为%fnx3的值为%fnx4%fn,x0,x1,x2,x3);2.直接三角分解法#defineN5#includevoidmain()inti,j,r,k;floataNN,lNN,

温馨提示

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

评论

0/150

提交评论