您好,欢迎访问三七文档
第三篇第一章误差与范数11.1误差的来源例1.1.1用差商hafhafaf)()()(求xxfln)(在3x处导数的近似值.取1.0h,1000.0h,h=0.000000000000001和h=0.0000000000000001分别用MATLAB软件计算,取十五位数字计算.解在MATLAB工作窗口输入下面程序a=3;h=0.1;y=log(a+h)-log(a);yx=y/h运行后得yx=0.32789822822991将此程序中h改为0.0001,运行后得yx=0.33332777790385后者比前者好.再取h=0.000000000000001,运行后得yx=0.44408920985006不如前者好.取h=0.0000000000000001,运行后得yx=0算出的结果反而毫无价值.例1.1.2分别求方程组bAX在下列情况时的解,其中A011111..(1)22b;(2)0122.b.解(1)首先将方程组bAX化为同解方程bAX1,然后在MATLAB工作窗口输入程序b=[2,2]';A=[1,1;1,1.01];X=A\b运行后输出当22b时,bAX的解为02X;(2)同理可得,当0122.b时,bAX的解为11X.例1.1.3计算e的近似值.解泰勒级数e!!4!3!21432 nxxxxxnx)(x,取1x,得e!1!41!31!2111 n.(1.2)这是一个无限过程,计算机无法求到精确值.只能在(1.2)取有限项时计算,再估计误差.如果取有限项!!!!)( nsn1413121111作为e的值必然会有误差,根据泰勒余项定理可知其截断误差为第一章误差与范数第三篇第一章误差与范数2e!)1()1( nesn)10(.如果取(1.2)的前九项,输入程序n=8;s=1;S=1;fork=1:ns=s*k;S=S+1/s,ends,S,R=3/(s*(n+1))或S1=1+1+1/2+1/(1*2*3)+1/(1*2*3*4)+1/(1*2*3*4*5)+1/(1*2*3*4*5*6)+1/(1*2*3*4*5*6*7)+1/(1*2*3*4*5*6*7*8),R1=3/(1*2*3*4*5*6*7*8*9)运行后结果S=R=2.718278769841278.267195767195768e-006因为截断误差为e),10(101968.267!93!)18()1(6-8 es所以e的近似值e!81!71!61!51!41!31!2111)1(8 s2.71828.1.2误差和有效数字例1.2.1取282.718作为e的四舍五入近似值时,求其绝对误差和相对误差.解在MATLAB工作窗口输入程序juewu=exp(1)-2.71828运行后输出结果为juewu=1.828459045505326e-006例1.2.2计算20sinxxdx的近似值,并确定其绝对误差和相对误差.解因为被积函数xxsin的原函数不是初等函数,故用泰勒级数求之.!!!!sin9 75 386xxxxxx421)(x,(1.5)这是一个无限过程,计算机无法求到精确值.可用(1.5)的前四项!!!75 36xxx421代替被积函数xxsin,得20sinxxyd20(x!!!14275 36xxx)dx=!7)2(!5)2(!3)2(275375 3=yˆ.根据泰勒余项定理和交错级数收敛性的判别定理,得到绝对误差第三篇第一章误差与范数3!99)2(ˆ9yyR=WU,在MATLAB命令窗口输入计算程序如下:symsxf=1-x^2/(1*2*3)+x^4/(1*2*3*4*5)-x^6/(1*2*3*4*5*6*7)y=int(f,x,0,pi/2),y1=double(y)y11=pi/2-(pi/2)^3/(3*3*2)+(pi/2)^5/(5*5*4*3*2)-(pi/2)^7/(7*7*6*5*4*3*2)inf=int(sin(x)/x,x,0,pi/2),infd=double(inf)WU=(pi/2)^9/(9*9*8*7*6*5*4*3*2),R=infd-y11因为运行后输出结果为:y1.37076216815449,yˆ=1.37074466418938,R1.75039651049147e-005,WU=1.782679830970664e-005410.所以,yˆ的绝对误差为410,故20sinxxyd71.370x.yˆ的相对误差为r71.37010ˆ4y0.0073%.1.3误差估计的基本方法例1.3.4设计三种算法求方程01522xx在)3,2(的一个正根*x的近似值,并研究每种算法的误差传播情况.解为解已知方程,我们可以设计如下三种算法,然后将计算结果与此方程的精确解5.2*x比较,观察误差的传播.算法1将已知方程化为同解方程x2215x.取初值20x,按迭代公式21215kkxx依次计算,,,,21nxxx,结果列入表1–3中.算法2将已知方程化为同解方程1215xx.取初值20x,按迭代公式12151kkxx依次计算,,,,21nxxx,结果列入表1–3中.算法3将已知方程化为同解方程141522xxxxx.取初值20x,按迭代公式为1415221kkkkkxxxxx依次计算,,,,21nxxx,结果列入表1–3中.我们为这三种算法的计算编写两套MATLAB程序如下:(1)MATLAB主程序function[k,juecha,xiangcha,xk]=liti112(x0,x1,limax)%输入的量--x0是初值,limax是迭代次数和精确值x;%输出的量--每次迭代次数k和迭代值xk,%--每次迭代的绝对误差juecha和相对误差xiangcha,x(1)=x0;fori=1:limax第三篇第一章误差与范数4x(i+1)=fl(x(i));%程序中调用的fl.mjuecha=abs(x(i)-x1);xiangcha=juecha/(abs(x(i))+eps);xk=x(i);k=i-1;[(i-1),juecha,xiangcha,xk]end(2)MATLAB调用函数程序及其计算结果①算法2的MATLAB调用函数程序functiony1=fl(x)y1=15/(2*x+1);②将MATLAB主程序和调用函数程序分别命名liti112.m和fl.m,分别保存为M文件,然后在MATLAB工作窗口输入命令[k,juecha,xiangcha,xk]=liti112(2,2.5,100)③运行后输出计算结果列入表1–3和表1-4中.④将算法2的MATLAB调用函数程序的函数分别用y1=15-2*x^2和y1=x-(2*x^2+x-15)/(4*x+1)代替,得到算法1和算法3的调用函数程序,将其保存,运行后将三种算法的前8个迭代值821,,,xxx列在一起(见表1-3),进行比较.将三种算法的821,,,xxx对应的绝对误差和相对误差的值列在一起(见表1-4),进行比较.表1-3例1.3.4中三种算法的计算结果算法迭代次数算法1的迭代结果算法2的迭代结果算法3的迭代结果022.000000002.00000000173.000000002.555555562-832.142857142.500550063-137632.837837842.500000064-3788403232.246963562.500000005-2.870417102.246963562.500000006-1.647835102.321774842.500000007-5.430770102.657901652.5000000099-Inf2.500000012.50000000表1-4例1.3.4中三种算法计算结果的误差算法迭代次数算法1的误差算法2的误差算法3的误差绝对误差相对误差绝对误差相对误差绝对误差相对误差00.500000000.250000000.500000000.250000000.500000000.2500000014.500000000.642857140.500000000.166666670.055555600.02173913285.500000001.030120480.357142860.1666666700.000550100.00021997313765.500000.000100020.337837840.119047620.000000060.0000000243788403261.000000010.253036440.112612620.000000000.0000000052.87039981171010.230287040.084345480061.64783901351010.178225160.076762470075.43074680701010.157901650.059408390099InfNaN0.000000010.00000000001.4数值计算中应注意的问题第三篇第一章误差与范数5例1.4.1求数)181(71915x的近似值.解(1)直接用MATLAB命令x=(7^15)*(sqrt(1+8^(-19))-1)运行后输出结果x=0问题出现在两个相近的数1981与1相减时,计算机运行程序sqrt(1+8^(-19))-1运行后输出结果ans=0由于计算机硬件只支持有限位机器数的运算,因此在计算中可能引入和传播舍入误差.因为有效数字的严重损失,导致输出18119的结果为0,计算机不能再与数157继续进行真实的计算,所以,最后输出的结果与x的精确值不符.(2)如果化为18187)181(71919151915x,再用MATLAB命令x=(7^15)*((8^(-19))/(sqrt(1+8^(-19))+1))运行后输出结果x=1.6471e-005这是因为18119化为18181919后,计算机运行程序x=(8^(-19))/(sqrt(1+8^(-19))+1)运行后的结果为x=3.4694e-018由于有效数字的损失甚少,所以运算的结果-18103.4694再与157继续计算,最后输出的结果与x的精确值相差无几.例1.4.2求数)13030ln(2y的近似值.解(1)直接用MATLAB程序x=30;x1=sqrt(x^2-1)运行后输出结果x1=29.9833输入MATLAB程序x=30;x1=29.9833;y=log(x-x1)运行后输出结果y=-4.0923(2)因为)13030ln(2中的30x很大,如果采用倒数变换法111221xxxxz,即130301ln)13030ln(22)190030ln(.输入MATLAB程序x=30;y=-log(x+sqrt(x^2-1))运行后输出结果y=-4.0941(3)输入MATLAB程序第三篇第一章误差与范数6x=30;y=log(x-sqrt(x^2-1))运行后输出结果y=-4.0941可见,(2)计算的近似值比(1)的误差小.参加计算的数,有时数量级相差很大.如果不注意采取相应的措施,在它们的加减法运算中,绝对值很小的那个数经常会被绝对值较大的那个数“吃掉”,不能发挥其作用,造成计算结果失真.例1.4.4请在16位十进制数值精度计
本文标题:第一章误差与范数
链接地址:https://www.777doc.com/doc-2205164 .html