1实验目的作为实践性非常强的课程,安排上机实验的目的,不仅是为了验证教材和授课内容,更重要的是,要通过实验深入理解方法的设计原理与处理问题的技巧,培养自行处理常规数值计算问题的能力和综合运用知识分析、解决问题的能力。1、通过上机实验加深课堂内容的理解。数值分析的主要任务就是研究适合于在计算机上使用的数值计算方法及与此相关的理论。通过编程上机,就可以加深对方法运行过程的理解,同时在编程中领会和理解数值计算方法的计算要领和步骤,体会问题的条件和限制范围,理解一般问题和特殊问题的区别。2、学会对数值计算结果的分析和处理。数值分析实验不只是编写程序得到一个数值结果,我们应在掌握数值计算计算方法的基本原理和思想的同时,注意方法处理的技巧及其与计算机的密切结合,重视误差分析、收敛性及稳定性的讨论。此外,还要注意算法能否在计算机上实现,应避免因数值方法选用不当、程序设计不合理而导致超过计算机的存储能力,或导致计算结果精度不高等。3、要能灵活掌握各种数值计算方法。由于针对同一个问题可以选用不同的数值计算方法,我们要注意各种方法的使用条件。通过上机,比较各种方法间的异同及优缺点,以便更好的使用不同的方法来解决实际问题,使计算机成为我们最好的工具。2实验基本要求一、上机前的准备工作1、复习和掌握与本次实验有关的教学内容。2、根据本次实验要求,在纸上编写算法及上机的程序,并经过人工模拟运行检验,减少不必要的错误,提高上机效率。切忌不编程序、不作人工检查就进行程序输入,这只能使上机调试的难度增加,甚至可能带来学习自信心的下降,影响后续课程的学习。二、上机实验步骤1、启动开发环境;2、建立源程序文件,输入源程序;3、编译产生目标程序,连接生成可执行程序,运行程序,输出结果;4、对数值计算结果进行误差分析,讨论数值算法的收敛性与稳定性;5、整理实验报告。三、实验报告实验报告是记录实验工作全过程的技术文档,实验报告的撰写是科学技术工作的一个组成部分。《数值分析》实验报告包括下列要求:1、实验原理;2、实验内容和要求;3、数值算法描述,包括数据输入、数据处理和数据输出;4、算法的实现(1)给出具体的计算实例,(2)经调试正确的源程序清单,(3)对具体的数值例子给出数值结果;5、计算结果的误差分析,算法的收敛性与稳定性的讨论;6、实验心得。3实验项目实验一、误差分析误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。一、实验目的1、通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;2、通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念;3、通过上机计算,了解舍入误差所引起的数值不稳定性。二、算法实例例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.2分别求方程组bAX在下列情况时的解,其中A01.1111.4(1)22b;(2)01.22b.解:(1)首先将方程组bAX化为同解方程bAX1,然后在MATLAB工作窗口输入程序b=[2,2]';A=[1,1;1,1.01];X=A\b运行后输出当22b时,bAX的解为02X;(2)同理可得,当01.22b时,bAX的解为11X.例1.3计算e的近似值。解:泰勒级数e!!4!3!21432 nxxxxxnx)(x,取1x,得e!1!41!31!2111 n.(1.1)这是一个无限过程,计算机无法求到精确值。只能在(1.1)取有限项时计算,再估计误差。如果取有限项!!!!)( nsn1413121111作为e的值必然会有误差,根据泰勒余项定理可知其截断误差为e!)1()1( nesn)10(.如果取(1.1)的前九项,输入程序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=8.267195767195768e-006R=2.718278769841275因为截断误差为e),10(101968.267!93!)18()1(6-8 es所以e的近似值e!81!71!61!51!41!31!2111)1(8 s2.71828.例1.4取282.718作为e的四舍五入近似值时,求其绝对误差和相对误差。解:在MATLAB工作窗口输入程序juewu=exp(1)-2.71828运行后输出结果为juewu=1.828459045505326e-006例1.5计算20sinxxdx的近似值,并确定其绝对误差和相对误差。解因为被积函数xxsin的原函数不是初等函数,故用泰勒级数求之。!!!!1sin429 75 386xxxxxx)(x,(1.5)这是一个无限过程,计算机无法求到精确值。可用(1.5)的前四项!!!14275 36xxx代替被积函数xxsin,得20sinxxyd20(x!!!14275 36xxx)dx=!7)2(!5)2(!3)2(275375 3=yˆ.根据泰勒余项定理和交错级数收敛性的判别定理,得到绝对误差!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ˆ的相对误差为6r71.37010ˆ4y0.0073%.例1.6设计三种算法求方程01522xx在)3,2(的一个正根*x的近似值,并研究每种算法的误差传播情况.解:为解已知方程,我们可以设计如下三种算法,然后将计算结果与此方程的精确解5.2*x比较,观察误差的传播.算法1将已知方程化为同解方程x2215x.取初值20x,按迭代公式21215kkxx依次计算,,,,21nxxx,结果列入表1–3中。算法2将已知方程化为同解方程1215xx.取初值20x,按迭代公式12151kkxx依次计算,,,,21nxxx,结果列入表1–1中。算法3将已知方程化为同解方程141522xxxxx.取初值20x,按迭代公式为1415221kkkkkxxxxx依次计算,,,,21nxxx,结果列入表1–1中。我们为这三种算法的计算编写两套MATLAB程序如下:(1)MATLAB主程序function[k,juecha,xiangcha,xk]=liti112(x0,x1,limax)%输入的量--x0是初值,limax是迭代次数和精确值x;%输出的量--每次迭代次数k和迭代值xk,%--每次迭代的绝对误差juecha和相对误差xiangcha,x(1)=x0;fori=1:limaxx(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调用函数程序及其计算结果7①算法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–1和表1-2中。④将算法2的MATLAB调用函数程序的函数分别用y1=15-2*x^2和y1=x-(2*x^2+x-15)/(4*x+1)代替,得到算法1和算法3的调用函数程序,将其保存,运行后将三种算法的前8个迭代值821,,,xxx列在一起(见表1-1),进行比较.将三种算法的821,,,xxx对应的绝对误差和相对误差的值列在一起(见表1-2),进行比较。表1-1例1.6中三种算法的计算结果算法迭代次数算法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-2例1.6中三种算法计算结果的误差算法迭代次数算法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.8703998117101