用递推公式计算定积分matlab版

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

所以经过多次迭代后会使误差增大很多倍。

由此可知:在实际应用过程中应尽量避免使用数值不稳定的公式。

相关文档
最新文档