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 endsquad1
运行:
小结:
在编写数学类的程序时,必须要熟读相关的数学知识。
标签:数值积分,理查森,积分,推算,算法,Matlab,Richardson 来源: https://www.cnblogs.com/jianle23/p/12817877.html