【数值分析】数值积分,Romberg积分法,外推加速,matlab实现,牛顿科茨公式

龙伯格Romberg积分法

可以通过用 n {n} n 个点得到的积分 T n {T_{n}} Tn ,和用 2 n {2n} 2n 个点得到的积分 T 2 n {T_{2n}} T2n ,推出计算精度更高的积分 T n ( 2 ) {T_{n}^{(2)}} Tn(2) T n = T n ( 1 ) {T_n=T_n^{(1)}} Tn=Tn(1) 的计算精度为 O ( h 2 ) {O(h^2)} O(h2) T n ( m ) {T_n^{(m)}} Tn(m) 的计算精度为 O ( h 2 m ) {O(h^{2m})} O(h2m)
T n ( m ) = T 2 n ( m − 1 ) − 2 − 2 ( m − 1 ) T n ( m − 1 ) 1 − 2 − 2 ( m − 1 ) T_{n}^{(m)}= \frac{T_{2n}^{(m-1)}-2^{-2(m-1)}T_n^{(m-1)}}{1-2^{-2(m-1)}} Tn(m)=122(m1)T2n(m1)22(m1)Tn(m1)
m = 1 , 2 , 3 , ⋯ m=1,2,3,\cdots m=1,2,3,
n = 2 k − 1    ,    k = 1 , 2 , 3 , ⋯ n=2^{k-1} \,\,,\,\, k=1,2,3, \cdots n=2k1,k=1,2,3,
T n ( 1 ) 为梯形公式 T_n^{(1)}为梯形公式 Tn(1)为梯形公式
matlab实现

%% 龙伯格积分法
% 输入函数,积分下界,积分上界,精度
% 输出积分值
function I = romberg1(f, a, b, e)
    I = 1000;
    for i = 1:10000
        for j = 1:i
            if j == 1
                T_mat(i-j+1,j) = trapz1(f, a, b, 2^(i-1)); // 梯形公式
            else
                T_mat(i-j+1,j) = (T_mat(i-j+2,j-1)-2^(-2*(j-1))*...
                    T_mat(i-j+1,j-1))/(1-2^(-2*(j-1)));
            end
            if(abs(T_mat(i-j+1,j)-I) < e)
                I = T_mat(i-j+1,j);
                T_mat
                return
            end
            I = T_mat(i-j+1,j);
        end 
    end
end

牛顿-科茨公式

中点公式、梯形公式与Simpson公式可以分别看成是 f ( x ) {f(x)} f(x) 用常数、线性插值函数和抛物线插值函数代替再积分的结果,进一步推广,将 f ( x ) {f(x)} f(x) n + 1 {n+1} n+1 个等距节点上的n次拉格朗日插值多项式替代,即得所谓的牛顿-科茨Newton-Cotes公式。
I = ∫ a b f ( x ) d x ≈ ∑ i = 0 n ω i f ( x i ) = I ′ I=\int_{ a }^{b} f(x) \mathrm dx \approx \sum_{i=0}^{ n} \omega_i f(x_i) =I' I=abf(x)dxi=0nωif(xi)=I
ω i = ( b − a ) C i ( n ) \omega_i = (b-a)C_i^{(n)} ωi=(ba)Ci(n)
C i ( n ) = ( − 1 ) n − i n i ! ( n − i ) ! ∫ 0 n ∏ j = 0 , i ≠ i n ( t − j ) d t C_i^{(n)}= \frac{(-1)^{n-i}}{ni!(n-i)!} \int_{0 }^{n} \prod_{j=0,i\ne i}^{ n}(t-j) \mathrm d t Ci(n)=ni!(ni)!(1)ni0nj=0,i=in(tj)dt

  • n ≤ 8 { n\le8 } n8 时科茨系数有正有负,求积公式不稳定,不使用高阶牛顿科茨公式
  • n {n} n 为奇数,牛顿科茨公式代数精度为 n {n} n 次, n {n} n 为偶数代数精度为 n + 1 {n+1} n+1

你可能感兴趣的:(数值分析,matlab,Romberg积分法,外推加速,牛顿科茨)