matlab romberg积分 龙贝格积分

% -----------------------------------------------------------------------------------------------
% Written by QQ137712826
% -----------------------------------------------------------------------------------------------
% f(x)=(10/x)^2*sin(10/x);
% 取epsilon=10^(-4) ,计算[1,3]上的romberg积分
% ------------------------------------------------------------------------------------------------
a = 1;
b = 3;
epsilon = 1e-4;
f = @(x)(10/x)^2*sin(10/x);  
[R,k,T] = aa(f,a,b,epsilon);%调用函数
fprintf("积分结果是    %f\r\n",R); %打印积分结果
fprintf("k=  %f\r\n",k); %打印迭代次数
disp(T); %打印T-表

function [R,k,T]=aa(fun,a,b,tol)
% 龙贝格(Romberg数值求解公式)
% inputs:
%   -fun:积分函数句柄
%   -a/b:积分上下限
%   -tol:积分误差
% Outputs:
%   -R:Romberg积分值
%   -k:迭代次数
%   -T:整个迭代过程
k=0; % 迭代次数
n=1; % 区间划分个数
h=b-a;
T=h/2*(fun(a)+fun(b)); %计算T(0,0)
err=1; %积分误差初始化
while err>=tol
    k=k+1;
    h=h/2;
    tmp=0;
    for i=1:n
        tmp=tmp+fun(a+(2*i-1)*h);
    end
    T(k+1,1)=T(k)/2+h*tmp; %外推算法
    for j=1:k
        T(k+1,j+1)=T(k+1,j)+(T(k+1,j)-T(k,j))/(4^j-1); %外推算法
    end
    n=n*2;
    err=abs(T(k+1,k+1)-T(k,k)); %更新积分误差
end
R=T(k+1,4);
end


结果

>> Untitled
积分结果是    -1.426025

k=  7.000000

  -56.5195         0         0         0         0         0         0         0
  -52.2329  -50.8040         0         0         0         0         0         0
  -23.8564  -14.3976  -11.9705         0         0         0         0         0
   -6.8278   -1.1516   -0.2685   -0.0828         0         0         0         0
   -2.6815   -1.2994   -1.3093   -1.3258   -1.3307         0         0         0
   -1.7327   -1.4164   -1.4242   -1.4260   -1.4264   -1.4265         0         0
   -1.5022   -1.4254   -1.4260   -1.4260   -1.4260   -1.4260   -1.4260         0
   -1.4450   -1.4260   -1.4260   -1.4260   -1.4260   -1.4260   -1.4260   -1.4260

你可能感兴趣的:(MATLAB,matlab,romberg积分,龙贝格积分)