龍格-庫塔法(Runge-Kutta method)
/ ROONG-uh KOOT-tah /
尤拉法只信任每一步起點量到的斜率,然後盲目地走到終點,這正是它會漂移的原因。龍格-庫塔法做得更聰明、也更貼近人的直覺:在真正踏出一步之前,它會在區間內數個點探測斜率,包括往前看到一半的地方,然後以巧妙加權後的平均值前進。這就像過彎時,不是只瞥一眼路,而是沿途多看幾次。
經典的四階版本 RK4 在一步 h 內積分 dx/dt = f(t, x),會計算四個斜率:k1 = f(t, x);k2 = f(t + h/2, x + h k1 / 2);k3 = f(t + h/2, x + h k2 / 2);k4 = f(t + h, x + h k3)。接著更新 x(t + h) = x(t) + (h/6)(k1 + 2 k2 + 2 k3 + k4)。這組特定的權重把泰勒級數誤差消去到四階,使局部誤差為 h^5 階、全域誤差為 h^4 階。每步四次函數計算換來巨大的精度提升:要達到相同的準確度,RK4 所需的步長遠比尤拉法大。
RK4 是求解常微分方程的通用主力,而其自適應步長變體(龍格-庫塔-費爾伯格法、Dormand-Prince 法,也就是 RK45 這類例程的核心)會即時估計局部誤差,自動縮小或放大 h。誠實的警告是:RK4 不是辛的,所以對哈密頓系統做極長時間積分時,其能量仍會緩慢漂移,此時反而是像韋爾萊法這種較低階的辛方法更佔優勢。階數也並非愈高愈好,因為捨入誤差與額外計算的成本終究會佔上風。
積分一條克卜勒軌道時,RK4 用不大的時間步就能在許多圈公轉中忠實地沿橢圓前進,而相同步長的顯式尤拉法會明顯向外盤旋;RK4 每一步的局部誤差按 h^5 縮小,所以把 h 減半,每步誤差約降為三十二分之一。
每步四次斜率探測,把尤拉法的一階爬行變成四階精度。
RK4 中的「四階」指的是全域誤差按 h^4 縮放,而非階段數;又因為 RK4 不是辛的,儘管它局部精度更高,在長時間能量守恆上一個較低階的辛積分器仍可能勝過它。