龙贝格积分(Romberg积分)的伪代码

龙贝格积分的伪代码:

n = 0            
N = 2 * n                                         // N 为分段小区间的个数
h = (b − a) / N                                   // h 为分段区间长

Delta_R = 10^20 * e                               //相邻两个 Romberg 积分的差值,e为事先指定的很小的一个数

T_N = 0.5 * h * [f(a) + f(b)]                     //矩形法T_1

while |Delta_R| > e do                            //|Delta_R|反映步长减半对积分精度的提高
    
    S = 0                                         //计算新增节点带来的矩形法的修正
    for    i = 0 to (N − 1)     do
        S = S + f( a + (i + 0.5) * h )
    end for

    T_2N = 0.5 * T_N + 0.5 * h * S                //计算矩形法的T_2N

    n = n + 1                                     //区间数的变化
    N = 2 * N
    h = h / 2.0 

    if n==1 then                                  //刚计算出 T_1 和 T_2 时,只能算出 S_1       
        S_N = (4 * T_2N − T_N ) / 3.0             
        T_N = T_2N                                //迭代

    else if n==2 then                             //刚算出 T_2 和 T_4 时,只能算出 S_2 和 C_1
        S_2N = (4 * T_2N  − T_N) / 3.0 
        C_N  = (16 * S_2N − S_N) / 15.0
        T_N = T_2N                                //迭代
        S_N = S_2N                   

    else if n==3 then                             //刚计算出 T_4 和 T_8 时,只能算出 S_4 ,C_2 ,R_1
        S_2N = (4  * T_2N − T_N) / 3.0
        C_2N = (16 * S_2N − S_N) / 15.0
        R_N  = (64 * C_2N − C_N) / 63.0
        T_N = T_2N                                //迭代
        S_N = S_2N
        C_N = C_2N 	  

    else                                          //当 n >= 4 时步长每缩减一半就会新算出一个R_2N
        S_2N = (4  * T_2N − T_N ) / 3.0 
        C_2N = (16 * S_2N − S_N ) / 15.0
        R_2N = (64 * C_2N − C_N ) / 63.0 
        Delta_R = R_2N − R_N                     //计算步长减半带来的精度提高
        T_N = T_2N                               //迭代 
        S_N = S_2N
        C_N = C_2N
        R_N = R_2N 

    end if

end while

return R_2N

猜你喜欢

转载自blog.csdn.net/moon_wander/article/details/80228516