数值积分公式及龙贝格(Romberg)算法实现matlab

一、数值积分方法得基本思想

在这里插入图片描述

二、复化求积公式

在这里插入图片描述

三、基于复化梯形求积公式的高精度求积算法——Richardson外推法和Romberg算法

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

       
       
       
       

四、Romberg算法的matlab程序:

function Romberg
% 龙贝格(Romberg数值求解公式)
% inputs:
%   -fun:积分函数句柄
%   -a/b:积分上下限
%   -tol:积分误差
% Outputs:
%   -R:4阶精度Romberg积分值
%   -k:迭代次数
%   -T:整个迭代过程
%
% Example
% fun=@(x)x^5;

a = 0;
b = 1;
epsilon = 1e-6;
tol = epsilon;
fun = @(x) x^5;
k=0; % 迭代次数
n=1; % 区间划分个数
h=b-a;
T=h/2*(fun(a)+fun(b));
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,k+1)
end

可以直接运行的,只出来积分的结果。

       代码是根据别人的写的(下面有参考链接),通过带进去几个函数发现精度只有 1 0 − 4 10^{-4} 104,因为是帮师姐编的论文里面的一笑部分,对精度要求不高,就没有再改进。

程序参考网址

  • 28
    点赞
  • 330
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
复化辛普森公式龙贝格公式都是数值积分的算法数值积分是一种将连续函数在一定区间上进行离散化处理,然后通过对离散化后的函数进行求和来近似计算定积分的方法。下面分别介绍这两种算法的原理、公式实现方法。 1. 复化辛普森公式 复化辛普森公式是辛普森公式的推广,可以更加准确地计算定积分。它的原理是将求解区间分成若干个小区间,每个小区间内再使用辛普森公式进行计算,最后将每个小区间的结果相加得到总结果。 复化辛普森公式公式如下: $$ I=\int_a^bf(x)dx\approx \frac{h}{3}[f(a)+4\sum_{i=1}^{n/2} f(a+(2i-1)h)+2\sum_{i=1}^{n/2-1}f(a+2ih)+f(b)] $$ 其中,$h=\frac{b-a}{n}$,$n$ 为分割的区间数,$f(x)$ 为被积函数。 复化辛普森公式实现代码如下: ```python def simpson(f, a, b, n): h = (b - a) / n result = f(a) + f(b) for i in range(1, n): if i % 2 == 0: result += 2 * f(a + i * h) else: result += 4 * f(a + i * h) result *= h / 3 return result ``` 2. 龙贝格公式 龙贝格公式是一种递归算法,可以通过反复运用梯形公式和辛普森公式,来不断提高数值积分的精度。它的原理是先用梯形公式计算一个初始值,然后通过不断将区间分半,并在新分出的点上使用辛普森公式进行计算,最终得到一个更加精确的结果。 龙贝格公式公式如下: $$ R(m,n)=\frac{4^nR(m-1,n)-R(m-1,n-1)}{4^n-1} $$ 其中,$R(m,n)$ 表示使用 $2^n$ 个区间,对 $f(x)$ 进行 $2^m$ 次递归得到的结果。 龙贝格公式实现代码如下: ```python def romberg(f, a, b, n): R = [[0] * (n + 1) for _ in range(n + 1)] H = [b - a] for i in range(n): H.append(H[i] / 2) R[0][0] = (f(a) + f(b)) * H[0] / 2 for i in range(1, n + 1): total = 0 for j in range(1, 2 ** i, 2): total += f(a + j * H[i]) R[i][0] = R[i-1][0] / 2 + H[i] * total for j in range(1, i + 1): R[i][j] = (4 ** j * R[i][j-1] - R[i-1][j-1]) / (4 ** j - 1) return R[n][n] ``` 以上是复化辛普森公式龙贝格公式数值积分算法的设计与实现。这两种算法虽然都是数值积分的算法,但各有特点,选择哪种算法应根据具体情况来考虑。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值