Exp3 龙贝格算法
参考答案
1、算法程序
function [val, M]=Romberg(f,ab,dalt)
% Romberg算法计算积分
% val 返回积分值
% M T数表
% f 被积函数,函数文件名
% ab 积分区间,1×2的向量
% dalt 精度
if nargin<3
dalt=1e-7; %设置默认精度10-7
end
i=1; %迭代次数初始化
h=ab(2)-ab(1); %积分区间大小
t=0; j=0; %加速次数初始化
T(1,1)=(h/2)*(feval(f,ab)*ones(2,1)); %T表第一行
while i<50 %设置最大跌代次数为50次
i=i+1; h=h/2; %T表下一行
T=[T zeros(i-1,1);zeros(1,i)]; %添加一行,初始化为0
x=ab(1)+h : 2*h : ab(2)-h;
y=feval(f,x)*ones(size(x')); % feval(f,x)求得f在x点值
T(i,1)=T(i-1,1)/2+h*y; %细化区间,求得梯形值
for t=2:i
j=t-1;
T(i,t)=(4^j*T(i,j)-T(i-1,j))/(4^j-1); %外推加速
end
if abs(T(i,i)-T(i-1,i-1))<=dalt %控制精度
break
end
end
if nargout==2
M=T; %返回T数表
end
val=T(i,i); %积分值
评论0