可以通过用 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)=1−2−2(m−1)T2n(m−1)−2−2(m−1)Tn(m−1)
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=2k−1,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)dx≈i=0∑nωif(xi)=I′
ω i = ( b − a ) C i ( n ) \omega_i = (b-a)C_i^{(n)} ωi=(b−a)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!(n−i)!(−1)n−i∫0nj=0,i=i∏n(t−j)dt