其他分享
首页 > 其他分享> > Matlab数值积分(2)

Matlab数值积分(2)

作者:互联网

实验目的:

  掌握理查森外推法

实验要求:

1. 给出理查森外推算法

2. 用Matlab实现理查森外推算法

3. 用Matlab实现自适应积分算法

实验内容:

  1. 理查森外推算法,数学知识:利用Richardson外推对逐次分半,若记则有由Richardson外推方法,可得到左式的误差为考虑舍入误差,m不能取得太大。

  算法描述:

  (1)命名函数;(2)如果输入的未知数少于4个,默认精度0.001;(3)描述T表示矩阵坐标;(4)依次赋值计算T表第一列;(5)根据Richardson公式求出T表矩阵的值;(6)若达到精度则运算结束,若未达到则循环计算;(7)输出T表,得出的值就是导数值。

  

  2.用Matlab实现理查森外推算法(见实验步骤)。

 

  3. 用Matlab实现自适应积分算法,被积函数在整个积分区间上的变化是不均衡到,在[a,b]分成的若干子区间中,有些变化缓慢,有些则变化大。为了使计算结果达到预期精度,可以使用Simpson求积公式。(此处只展示MATLAB程序)。

 

实验步骤:

  1.理查森外推算法代码:

 1 function t=romberg(fname,a,b,ep)
 2 if nargin<4
 3     ep=1e-5;
 4 end
 5 i=1;j=1;h=b-a;
 6 T(i,1)=h/2*(feval(fname,a)+feval(fname,b));
 7 T(i+1,1)=T(i,1)/2+sum(feval(fname,a+h/2:h/2+0.001*h))*h/2;
 8 T(i+1,j+1)=4^j*T(i+1,j)/(4^j-1)-T(i,j)/(4^j-1);
 9 while abs(T(i+1,i+1)-T(i,i))>ep
10     i=i+1;h=h/2;
11     T(i+1,1)=T(i,1)/2+sum(feval(fname,a+h/2:h:b-h/2+0.001*h))*h/2;
12     for j=1:i
13         T(i+1,j+1)=4^j*T(i+1,j)/(4^j-1)-T(i,j)/(4^j-1);
14     end
15 end
16 T
17 t=T(i+1,j+1);
romberg

  运行示例:

  

 

 

  2.自适应积分算法代码:

 1 function I=squad1(fun,a,b,ep)
 2 if nargin<4
 3     ep=1e-5;
 4 end
 5 N=1;
 6 h=b-a;
 7 T1=h/2*(feval(fun,a)+feval(fun,b));
 8 S0=T1;
 9 while 1
10     h=h/2;
11     T2=T1/2;
12     for k=1:N
13         T2=T2+h*feval(fun,a+(2*k-1)*h);
14     end
15     I=(4*T2-T1)/3;
16     if abs(I-S0)<ep
17         break;
18     end
19     N=2*N;
20     T1=T2;
21     S0=I;
22 end
squad1

  运行:

  

 

 

小结:

  在编写数学类的程序时,必须要熟读相关的数学知识。

 

标签:数值积分,理查森,积分,推算,算法,Matlab,Richardson
来源: https://www.cnblogs.com/jianle23/p/12817877.html