四階龍格-庫塔法(RK4)
/ ar-kay-FOUR /
如果龍格-庫塔是「在一步之內取樣多個斜率並平均」的想法,RK4 就是它最著名的具體配方——那條四斜率公式,數十年來一直是「就幫我解這個 ODE」的預設方法。它命中了甜蜜點:準確度高到在平滑問題上你鮮少需要更花俏的東西,卻又簡單到十來行程式碼就能寫出。
RK4 用四次斜率計算走一步:k1 = f(t_n, y_n),起點的斜率;k2 = f(t_n + h/2, y_n + (h/2)*k1),用 k1 到達中點後的斜率;k3 = f(t_n + h/2, y_n + (h/2)*k2),第二個、修正過的中點斜率;以及 k4 = f(t_n + h, y_n + h*k3),遠端的斜率。這一步是一個最信任兩個中點斜率的加權平均:y_{n+1} = y_n + (h/6)*(k1 + 2*k2 + 2*k3 + k4)。1-2-2-1 的加權絕非偶然——它正是消去誤差項直到 h^4 的模式,使方法成為四階,並呼應積分的辛普森法則(當 f 只依賴 t 時 RK4 正好化約為辛普森法則)。
RK4 是四階:它的全域誤差是 O(h^4),所以步長減半使誤差縮為十六分之一。這份豐厚正是它長期擔任非剛性問題主力的原因。誠實的限制是:它每步要算四次 f(只有在你想要多個正確位數且 f 平滑時才划算);它步長「固定」,無法適應解中容易與困難的區段(現代求解器用嵌入對來做這件事);而且和所有顯式龍格-庫塔法一樣,它只有條件穩定,因此對剛性方程是錯的,那裡需要隱式方法。
在 y' = y、y(0) = 1、h = 0.5 上走一步 RK4:k1 = 1、k2 = f(.25, 1.25) = 1.25、k3 = f(.25, 1.3125) = 1.3125、k4 = f(.5, 1.65625) = 1.65625,所以 y_1 = 1 + (0.5/6)*(1 + 2.5 + 2.625 + 1.65625) = 1.6484。真值 e^0.5 = 1.64872——RK4 走一步就勝過前向歐拉法走數十步。
以 1-2-2-1 平均的四個斜率樣本,給出每步四階的準確度。
純 RK4 是固定步長且顯式的——不是剛性求解器,本身也不適合做誤差控制的計算。實用的程式庫用嵌入式 RK 對(RKF45、Dormand-Prince)做自適應步長,並用隱式 RK 或 BDF 解剛性系統。