用递推公式计算定积分matlab版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用递推公式计算定积分
实验目的:
1.充分理解不稳定的计算方法会造成误差的积累,在计算过程中会导致误差的迅速增加,从而使结果产生较大的误差。
2.在选择数值计算公式来进行近似计算时,应学会选用那些在计算过程中不会导致误差迅速增长的计算公式。
3.理解不稳定的计算公式造成误差积累的来源及具体过程;
4.掌握简单的matlab语言进行数值计算的方法。
实验题目:
对n=0,1,2,…,20,计算定积分:
实验原理:
由于y(n)== –
在计算时有两种迭代方法,如下:
方法一:
y(n)=– 5*y(n-1),n=1,2,3, (20)
取y(0)== ln6-ln5 ≈0.182322
方法二:
利用递推公式:y(n-1)=-*y(n),n=20,19, (1)
而且,由= * ≤≤*=
可取:y(20)≈*()≈0.008730.
实验内容:
对算法一,程序代码如下:
function [y,n]=funa()
syms k n t;
t=0.182322;
n=0;
y=zeros(1,20);
y(1)=t;
for k=2:20
y(k)=1/k-5*y(k-1);
n=n+1;
end
y(1:6)
y(7:11)
对算法二,程序代码如下:
%计算定积分;
%n--表示迭代次数;
%y用来存储结果;
function [y,n]=f();
syms k y_20;
y=zeros(21,1);
n=1;
y_20=(1/105+1/126)/2;
y(21)=y_20;
for k=21:-1:2
y(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.4116
2.3914
-11.7069
58.7346
-293.5063
%再显示y(7)—y(11) ans =
1.0e+005 *
0.0147
-0.0734
0.3669
-1.8346
9.1728
y =
1.0e+012 * Columns 1 through 11
0.0000
-0.0000
0.0000
-0.0000
0.0000
-0.0000
0.0000
-0.0000
0.0000
-0.0000
0.0000
Columns 12 through 20 -0.0000
0.0000
-0.0001
0.0006
-0.0029
0.0143
-0.0717
0.3583
-1.7916
n = 19
算法二结果:>> [y,b]=f y =
0.1823
0.0884
0.0580
0.0431
0.0343
0.0285
0.0243
0.0212
0.0188
0.0169
0.0154
0.0141
0.0130
0.0120
0.0112
0.0105
0.0099
0.0093
0.0089
0.0083
0.0087
b =
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)
所以经过多次迭代后会使误差增大很多倍。
由此可知:在实际应用过程中应尽量避免使用数值不稳定的公式。