理查森外推法——龙贝格积分

理查森外推法

        根据积分估计值本身,可以构造出方法来改进数值积分的结果。这些方法一般被称为理查森外推法。

以复合梯形法则为例进行推导

复合梯形法则的估计值和误差可以表示为:

I = I(h)+E(h)

其中I为积分精确值,I(h)为积分近似值,E为截断误差。用两个步长计算结果为:

I(h_1)+E(h_1) = I(h_2)+E(h_2)

其中E的表达式为:

E=- \frac{b-a}{12}h^2f^{''}

假设二阶导为与步长无关的常数

\frac{E(h_1)}{E(h_2)} = \frac{h_1^2}{h_2^2}

代入可得:

I = I(h_2)+\frac{1}{(h_1/h_2)^2-1}[I(h_2)-I(h_1)]

当h2 = h1/2时:
I = \frac{4}{3}I(h_2)-\frac{1}{3}I(h_1)

龙贝格积分公式

I_{j,k} = \frac{4^{k-1}I_{j+1,k-1}-I_{j, k-1}}{4^{k-1}-1}

Matlab实现

function [q, ea, iter] = romberg(func, a, b, es, maxit, varargin)
% 应用理查森外推法计算积分
%input:
% func;被积函数
% a, b:积分上下限
% es:期望误差
% maxit:最大迭代步数
%output:
% q:积分结果
% ea:实际误差
% iter:实际迭代步数
if nargin<4||isempty(es), es = 0.000001; end
if nargin<5||isempty(maxit), maxit = 50; end
n = 1;
I(1, 1) = trap(func, a, b, n, varargin{:});
iter = 0;
while iter<maxit
    iter = iter+1;
    n = 2^iter;
    I(iter+1, 1) = trap(func, a, b, n, varargin{:});
    for k = 2:iter+1
        j = 2+iter-k;
        I(j, k) = (4^(k-1)*I(j+1,k-1) - I(j,k-1)) / (4^(k-1)-1);
    end
    ea = abs((I(1,iter+1)-I(2,iter)) / I(1,iter+1)) * 100;
    if ea<=es, break; end
end
q = I(1, iter+1);
end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值