龙贝格积分——matlab实现

本文详细介绍了龙贝格积分的理论基础及其在MATLAB中的实现方法,包括递归梯形公式、理查森外推思想的应用,以及如何通过龙贝格积分表逼近积分值。并通过一个具体实例展示了积分计算的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日期:2019-11-12
作者:老李

实验报告

龙贝格积分关于MATLAB实现

目标:

1.应用MATLAB实现龙贝格积分
2.打印龙贝格积分表

过程:

1.重要理论:
递归梯形公式:

T(0)=(h/2)(f(a)+f(b))T(0) = (h/2)(f(a)+f(b))T(0)=(h/2)(f(a)+f(b))开始,梯形公式序列T(J){T(J)}T(J)可由以下递归公式生成:T(J)=T(J−1)2+h∑k=1Mf(x2k−1)T(J) =\frac{T(J-1)}{2}+h\sum_{k=1}^{M}f(x_{2k-1})T(J)=2T(J1)+hk=1Mf(x2k1)
其中h=(b−a)/2J,xk=a+khh=(b-a)/2^{J},{x_{k} = a+kh}h=(ba)/2J,xk=a+kh

龙贝格积分:

设用步长hhh2h2h2h得到一个逼近公示的两个结果,则两个结果的代数运算将得到改进的答案。每次改进将误差项的阶由O(h2N)O(h^{2N})O(h2N)提高到O(h2N+2)O(h^{2N+2})O(h2N+2)。该过程称为龙贝格积分。

龙贝格积分的一个缺点是,为了将误差由O(h2N)O(h^{2N})O(h2N)降低到O(h2N+2)O(h^{2N+2})O(h2N+2),函数求值次数增加了一倍

应用理查森外推思想的龙贝格积分

给定QQQ的两个逼近R(2h,K−1)R(2h, K-1)R(2h,K1)R(h,K−1)R(h, K-1)R(h,K1),满足
Q=R(h,K−1)+c1h2K+c2h2K+2+...Q = R(h, K-1) + c_{1}h^{2K}+c_{2}h^{2K+2}+...Q=R(h,K1)+c1h2K+c2h2K+2+...
Q=R(2h,K−1)+c14Kh2K+c24K+1h2K+2+...Q = R(2h, K-1) + c_{1}4^{K}h^{2K}+c_{2}4^{K+1}h^{2K+2}+...Q=R(2h,K1)+c14Kh2K+c24K+1h2K+2+...其改进的逼近为
Q=4KR(h,K−1)−R(2h,K−1)4K−1+O(h2K+2)Q = \frac{4^{K}R(h, K-1)-R(2h, K-1)}{4^{K}-1}+O(h^{2K+2})Q=4K14KR(h,K1)R(2h,K1)+O(h2K+2)
我们从而可以得到龙贝格积分表:
在这里插入图片描述

2.MATLAB实现

生成J⩾KJ\geqslant KJK的逼近表R(J,K)R(J, K)R(J,K),并以R(J+1,J+1)R(J+1,J+1)R(J+1,J+1)为最终解来逼近积分∫abf(x)dx≈R(J,J)\int_{a}^{b}f(x)dx\approx R(J,J)abf(x)dxR(J,J)
逼近R(J,K)R(J,K)R(J,K)存在于一个特别的下三角矩阵中,第0列元素R(J,0)R(J,0)R(J,0)用基于2J2^{J}2J[a,b][a,b][a,b]子区间的连续提醒方法计算,然后利用龙贝格公式计算R(J,K)R(J,K)R(J,K)

1⩽K⩽J1\leqslant K\leqslant J1KJ时,第JJJ行的元素为
R(J,K)=R(J,K−1)+R(j,k−1)−R(J−1,K−1)4K−1R(J,K) = R(J,K-1) + \frac{R(j, k-1)-R(J-1, K-1)}{4^{K}-1}R(J,K)=R(J,K1)+4K1R(j,k1)R(J1,K1)
∣R(J,J)−R(J+1,J+1)∣<tol|R(J,J)-R(J+1,J+1)|<tolR(J,J)R(J+1,J+1)<tol时,程序在第(J+1)行结束

代码如下:

function [ R, q, err0, err1, h ] = rombergIntegration( f, a, b, n, tol0, tol1)
%rombergIntegration: to count the integration of f in [a,b] 
%by using romberg method
% Input: -          f is the intergrand input by using function handle
%        -          a and b are upper and lower limits of integration
%        -          n is the maximum number of rows in the table
%        -          tol0 is the tolerance for 
%real integration and romberg integration
%        -          tol1 is the tolerance for each iteration
%Output: -          R is the Romberg table
%        -          q is the quadrature value
%        -          err0 is the error between real integration and romberg
%        integration
%        -          err1 is the error between final iteration
%        -          h is the smallest step size used
M = 1;%记录每次的步数
h = b-a;%最大步长
y = integral(f,a,b);%计算实际积分值
err0 = 1;%给真值和计算值的差赋予初值
err1 = 1;%给前后迭代差值赋予初值
J = 0;%龙贝格积分表的行
R = zeros(n,n);%分配矩阵大小
R(1,1) = h*(feval(f,a)+feval(f,b))/2;%第一个值
while (err>tol)&&(J<n)%迭代条件
    J = J+1;
    h = h/2;
    s = 0;
    %构造一列中,上下行元素之间的关系
    for p = 1:M
        x = a+h*(2*p-1);
        s = s+feval(f,x);
    end
    R(J+1, 1) = R(J, 1)/2+h*s;
    %更新步数
    M = 2*M;
    %构造一行中,左右列元素之间的关系
    for K=1:J
        R(J+1, K+1) = R(J+1, K)+(R(J+1,K)-R(J,K))/(4^K-1);
    end
    %表示绝对误差
    err1 = abs(R(J,J)-R(J+1,K+1));
    err0 = abs(R(J+1,K+1)-y);
end
%表示最终所得的积分值
q = R(J+1,J+1);
end
3.结果

我们打算计算这样一个积分:
∫01exdx\int_{0}^{1}e^{x}dx01exdx

输入参数:

f = @(x)exp(x)
a = 0
b = 1
n = 8
tol0 = eps
tol1 = eps

结果如下:
在这里插入图片描述
在这里插入图片描述

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值