用递推公式计算定积分(matlab版).doc
用递推公式计算定积分实验目的:1.充分理解不稳定的计算方法会造成误差的积累,在计算过程中会导致误差的迅速增加,从而使结果产生较大的误差。2.在选择数值计算公式来进行近似计算时,应学会选用那些在计算过程中不会导致误差迅速增长的计算公式。3.理解不稳定的计算公式造成误差积累的来源及具体过程;4.掌握简单的matlab语言进行数值计算的方法。实验题目:对n=0,1,2,…,20,计算定积分:∫10𝑥𝑛𝑥+5𝑑𝑥实验原理:由于y(n)==–∫10𝑥𝑛𝑥+51𝑛∫105𝑥𝑛‒1𝑥+5𝑑𝑥在计算时有两种迭代方法,如下:方法一:y(n)=–5*y(n-1),n=1,2,3,…,20;1𝑛取y(0)==ln6-ln5≈0.182322∫101𝑥+5𝑑𝑥方法二:利用递推公式:y(n-1)=-*y(n),n=20,19,…,1.15𝑛15而且,由=*≤≤*112616∫10𝑥20𝑑𝑥∫10𝑥20𝑥+5𝑑𝑥15=∫10𝑥20𝑑𝑥1105可取:y(20)≈*()≈0.008730.121105+1126实验内容:对算法一,程序代码如下:function[y,n]=funa()symsknt;t=0.182322;n=0;y=zeros(1,20);y(1)=t;fork=2:20y(k)=1/k-5*y(k-1);n=n+1;endy(1:6)y(7:11)对算法二,程序代码如下:%计算定积分;%n--表示迭代次数;%y用来存储结果;function[y,n]=f();symsky_20;y=zeros(21,1);n=1;y_20=(1/105+1/126)/2;y(21)=y_20;fork=21:-1:2y(k-1)=1/(5*(k-1))-y(k)/5;n=n+1;end实验结果:由于计算过程中,前11个数字太小,后9个数字比较大,造成前面几个数字只显示0.0000的现象,所以先输出前6个,再输出7—11个,这样就能全部显示出来了。算法一结果:[y,n]=funa%先显示一y(1)—y(6)ans=0.1823-0.41162.3914-11.706958.7346-293.5063%再显示y(7)—y(11)ans=1.0e+005*0.0147-0.07340.3669-1.83469.1728y=1.0e+012*Columns1through110.0000-0.00000.0000-0.00000.0000-0.00000.0000-0.00000.0000-0.00000.0000Columns12through20-0.00000.0000-0.00010.0006-0.00290.0143-0.07170.3583-1.7916n=19算法二结果:>>[y,b]=fy=0.18230.08840.05800.04310.03430.02850.02430.02120.01880.01690.01540.01410.01300.01200.01120.01050.00990.00930.00890.00830.0087b=21实验分析:从两题的计算结果可以看出来,算法一是不稳定的,而算法二是稳定的。对算法一:由于y(1)本身具有一定的误差,设为a_1,则由于y(n)=1/n-5y(n-1)=1/n-5(1/(n-1)-5y(n-1))=……=1/n-5/(n-1)-5^2/(n-2)-…-(5^n)*y(0)所以经过多次迭代后会使误差增大很多倍。由此可知:在实际应用过程中应尽量避免使用数值不稳定的公式。