【计算方法数值分析】复化梯形公式、复化辛普森公式和龙贝格数值积分

在这里插入图片描述
1、 复化梯形公式
在这里插入图片描述

%复化梯形公式
function t=agui_trapz(fname,d2fname,a,b,e)
%fname为被积函数,d2fname为函数fname的二阶导数,a,b分别为下界和上届,e为精度
y=abs(feval(d2fname,a:1e-5:b));
m=max(y);
h=abs(sqrt(12*e(b-a)./m));
n=ceil((b-a)/h)
h=(b-a)/n;
fa=feval(fname,a);
fb=feval(fname,b);
f=feval(fname,a+h:h:b-h+0.001*h);
t=h*(0.5*(fa+fb)+sum(f));

在这里插入图片描述
在这里插入图片描述

2、复化辛普森公式
在这里插入图片描述

%复化辛普森公式
function s=agui_simpson(fname,d4fname,a,b,e)
%fname为被积函数,d4fname为函数fname的四阶导数,a,b分别为下界和上届,e为精度
y=abs(feval(d4fname,a:1e-5:b));
m=max(y);
h=abs((2800*e(b-a)./m).^(0.25));
n=ceil((b-a)/h)
h=(b-a)/n;
fa=feval(fname,a);
fb=feval(fname,b);
s=fa-fb;
x=a;
for i=1:n;
    x=x+h/2;s=s+4*feval(fname,x);
    x=x+h/2;s=s+2*feval(fname,x);
end
s=s*h/6;

在这里插入图片描述
在这里插入图片描述

3、龙贝格数值积分法
在这里插入图片描述

%龙贝格数值积分法
function r=agui_rbg(fname,a,b)
%fname为被积函数,a,b分别为下界和上界
e=1e-6;
i=1;j=1;h=b-a;
T(i,1)=h/2*(feval(fname,a)+feval(fname,b));
T(i+1,1)=T(i,1)/2+sum(feval(fname,a+h/2:h:b-h/2+0.001*h))*h/2;
T(i+1,j+1)=4^j*T(i+1,j)/(4^j-1)-T(i,j)/(4^j-1);
while abs(T(i+1,i+1)-T(i,i))>e
    i=i+1;
    h=h/2;
    T(i+1,1)=T(i,1)/2+sum(feval(fname,a+h/2:h:b-h/2+0.001*h))*h/2;
    for j=1:i
        T(i+1,j+1)=4^j*T(i+1,j)/(4^j-1)-T(i,j)/(4^j-1);
    end 
end
T
r=T(i+1,j+1);
end

在这里插入图片描述
结果分析
在这里插入图片描述
1.由表格比较可得出,无论是复化梯形公式、复化辛普森公式还是龙贝格积分公式,都有着较高的精度,相较之下,龙贝格积分公式精度最高。
2.数值求积的误差除了与被积函数有关之外,还与积分区间的长度(b-a)有关,积分区间越小,则求积公式的截断误差也越小。而在对积分区间作同样的分割的条件下,复合辛普生求积公式比复合梯形公式的计算精度高。
3.在计算速度方面,从表中可看出,复化梯形公式的等分数要比其它两个大得多,且从计算结果上可看出复化辛普生公式也比复化梯形公式的收敛速度快得多。
4.从计算公式复杂性而言,龙贝格数值积分公式的计算量最少。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐