实验五误差分析_第1页
实验五误差分析_第2页
实验五误差分析_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、实验五绪论-误差分析【实验目的】1、了解数值计算中的误差种类,及避免误差危害的几种手段,2、深刻体会”数学上恒等,数值上不一定恒等”的含义3、为本课程的学习准备良好的数值思想【实验内容】1、误差的来源与分类2、数值计算中避免误差危害的若干方法3、数值实验举例4、根据要求,完成实验报告中的内容【实验指导】1) 误差的来源与分类误差的来源是多方面的,通常误差主要由以下4个方面的因素引起:模型误差(ModelingError)把实际问题向数学问题转化的过程中,忽略了一些对问题影响不是很大的因素,我们称这种忽略了的因素为模型误差;观测误差(MeasurementError)在一般的数学模型中,往往含有

2、比较多的参数,而这些参数的值一般都需要通过观测得到,而观测得到的结果由于受到观测设备、观测方法等因素的影响往往都有误差,我们称这种由于观测引起的误差为观测误差。截断误差(TruncationError)当我们不能得到数学模型的精确解时,通常要用数值方法求它的近似解,其近似解与精确解之间的误差称为截断误差。例如:在计算机上直接使用公式nn!计算e时,会出现无穷过程的计算,不能在有限时间内得到需N1e:要的结果,因此,通常需要将上述无穷过程近似为有穷过程:nn!,由此可以得到近似的计算结果,这样用数值方法中的有穷过程替代数学模型中的无限过程时,就会产生上述截断误差。截断误差又称为方法误差。舍入误差

3、(RoundoffError)由于计算机的字长有限,在使用计算机进行数据处理时,计算机表示的数班或计算结果会与原始数据或理论上的计算结果有差异,这种误差就是舍入冬差。比如说3,在计算机上表示时,只能表示成0.333的形式,这里0.333与3的误差就是舍入误差。由于误差是不可避免的,我们只能尽可能的减少它对计算结果的影响。在计算方法这门课程中,我们主要关心如何减少截断误差与舍入误差对计算结果的影响。2) 数值计算中避免误差危害的若干方法选择稳定的算法一一稳定算法是指后面一次运算产生的误差不能把前面一次运算所产生的误差扩大,这样就可以保证在运算过程中计算结果的误差能够控制,保证计算结果的可靠性;避

4、免相近两数相减一一由于两个相近数相减,会丢失有效数字,从而会增大相对误差。避免相近数相减需要结合具体的问题采取不同的方法或技巧。例如:当&>0,X1时,利用等式Jx十£M=-=Xe,X,.r八lnx£一Inx=In11一可以避免相近数相减。避免分母过小或用绝对值较大的数作乘数一一分母过小或乘数过大会导致计算机数据溢出,从而影响计算结果;(1) 避免大数“吃”小数;简化计算,减少计算步骤一一一般来说运算次数减少,则计算过程中的积累误差有可能下降,这样就可以达到降低误差的目的。3) 数值实验举例(1)下述三个表达式在数学上是恒等的,试在字长为m的计算机上,分别利用

5、这三个表达式计算其在区间°,2兀上一些点处的函数值,并比较计算结果,并说明理由。2_22A=(1-cosx)/x,B=(sinx)/x)/(1cosx),C=2(sin(x/2)/x)解:为了能够模拟字长为m的计算机上的数值计算我们先编写函数digit(x,m),其功能是将向量x表示成字长为m的规格化浮点向量。函数digit(x,m)的Matlab程序如下:functiony=digit(x,m)%Thisfunctionisusedtoroundxtowards%anearestnormalizedscientificm-digitnumber.%Forexample,%digit

6、(12.345,3)=0.123*10A2;%digit(12.345,4)=0.1235*10A2;%digit(0.012345,3)=0.123*10A-1.%Input:%-xisavectorinRAk.%-misthegivennumberofsignificant%decimaldigitsofcomputer.%Sep.,26,2007byXuMinghua.k=max(size(x);y=x;%initializethevalueofy.fori=1:kifx(i)<0sign=-1;elsesign=1;endx(i)=abs(x(i);p=0;ifx(i)<0

7、.1&x(i)>epswhilex(i)<0.1x(i)=x(i)*10;p=p-1;endendifx(i)>=1whilex(i)>=1x(i)=x(i)/10;P=P+1;endendy(i)=round(x(i)*10Am)/10Am;y(i)=sign*y(i)*10Ap;endreturn为了便于看出上述三种表达式在数值计算上的差异,我们设计算机的字长m=2,并将x分别取为:2e-12e-22e-32e-42e-5pi/2pi3*pi/22*pi利用下述主程序可以得到如下计算结果:xABC0.20000.50000.50000.50000.02000

8、0.50000.50000.002000.50000.50000.000200.50000.50000.000000.50000.50001.60000.40000.41000.41003.10000.21000.23000.20004.70000.04600.04400.05106.300000.00000.0002从上述计算结果可以知道:数学上恒等,数值上不一定恒等。结合防止误差的危害手段思考造成上述差异的原因。上述计算的主程序如下:%MainprogramforExample1%Showthedifferenceofthefollowing3expressions%1.A=(1-cosx

9、)/xA2,%2.B=(sinx/x)A2/(1+cosx),%3.C=2(sin(x/2)/x)A2%innumericalcomputation.clcm=2;x=digit(2e-12e-22e-32e-42e-5pi/2pi3*pi/22*pi',m);a=(1-digit(cos(x),m)./digit(x.A2,m);a=digit(a,m);b=digit(digit(digit(sin(x),m)./x),m).A2,m)./digit(1+cos(x),m);b=digit(b,m);c=2*digit(digit(sin(digit(x./2,m),m)./x),

10、m),2;c=digit(c,m);x,a,b,c(2)编写程序按照给定的顺序,在给定字长的计算机上分别计算$=12345.F0。S='T'2''IO。,12345其中Jh1:1000,为区间0,0.5上的随机数,在此基础上演示数值计算过程中大数吃小数的现象。解:下述程序先在许可的计算机精度下计算s和3,然后模拟字长为m的计算机按照上述给定顺序计算5和&,为了能够看到大数吃小数的现象,字长取为m=5。程序与结果分别如下:Matlab程序:%Compute$S1=A+B(1,1)+cdots+B(1,n)$and$S2=B(1,1)+cdots+B(1,n

11、)+A$,and%show"bignumber"eating"smallnumber".%Assumethecomputerisanm-digitcomputer.clc;m=5;%initializethedadaA=12345;n=1000;B=digit(0.5*digit(rand(1,n),m),m);%Compute$S1=A+B(1,1)+cdots+B(1,n)$and$S2=B(1,1)+cdots+B(1,n)+A$,%inmachineprecision.S1=A;fori=1:nS1=S1+B(1,i);endS2=0;fori=

12、1:nS2=S2+B(1,i);endS2=S2+A;fprintf('Numericalresultscomputedinmachineprecisionn');fprintf('S1=%8.4e,S2=%8.4e,S1-S2=%8.4en',S1,S2,S1-S2);%Compute$S1=A+B(1,1)+cdots+B(1,n)$and$S2=B(1,1)+cdots+B(1,n)+A$,%inanm-digitnumbercomputer.C1=A;fori=1:nC1=digit(C1+B(1,i),m);endfprintf('n'

13、);fprintf('Numericalresultscomputedinacomputerwithm-digitnumbern')fprintf('S1=%8.4e,TheerrorofS1is%8.4en',C1,C1-S1);C2=0;fori=1:nC2=digit(C2+B(1,i),m);endC2=C2+A;fprintf('S2=%8.4e,TheerrorofS2is%8.4en',C2,C2-S2);fprintf('S1-S2=%8.4en',C1-C2);运行上述程序可得结果如下:Numericalresu

14、ltscomputedinmachineprecisionS1=1.2596e+004,S2=1.2596e+004,S1-S2=-9.0949e-012Numericalresultscomputedinacomputerwithm-digitnumberS1=1.2345e+004,TheerrorofS1is-2.5088e+002S2=1.2596e+004,TheerrorofS2is-1.0320e-001S1-S2=-2.5078e+002从上述结果可以看出如果利用现有的机器精度来计算$和S,则两者的差异不大,但如果在字长为5的计算机上计算$和S,则两者差异很大,出现了大数吃小数的现

温馨提示

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

评论

0/150

提交评论