龍格-庫塔法(Runge-Kutta method)
/ ROONG-uh KOO-tah /
前向歐拉法目光短淺:它只在一步的起點讀斜率,所以總是誤判曲線往哪裡彎。更聰明的想法是先往前窺探——在一步「之內」的一或多個點取樣斜率,再走一步,其方向是這些樣本的巧妙平均。龍格-庫塔法正是這一族「每步取樣多個斜率,再加以組合」的方案,能在不記住任何過去步驟的情況下達到高準確度。
最簡單的改進是「中點法」:用起點斜率往前窺探到一步的一半,在「那裡」讀斜率,再用這個更好的斜率走完整步。分步寫:k1 = f(t_n, y_n);k2 = f(t_n + h/2, y_n + (h/2)*k1);y_{n+1} = y_n + h*k2。這是二階——誤差 O(h^2)。「Heun 法」(改良歐拉法)則平均起點斜率與一個試探性歐拉預測終點的斜率:k1 = f(t_n, y_n);k2 = f(t_n + h, y_n + h*k1);y_{n+1} = y_n + (h/2)*(k1 + k2),也是二階。兩者每步都算兩次 f,卻消去了歐拉法留下的領導誤差項,就像辛普森法則在積分上勝過矩形法則一樣。
龍格-庫塔法是當之無愧的通用 ODE 主力求解器:它們「自啟動」(只需當前點,不像多步法要有歷史)、容易達到高階,而著名的四階 RK4 命中了「投入產出比」的絕佳甜蜜點。誠實的提醒是:更高的準確度代表每步更多次 f 計算(成本),而標準的「顯式」龍格-庫塔法只有條件穩定——對剛性問題表現差,那裡要改用「隱式」龍格-庫塔法或 BDF 法。定義任一特定龍格-庫塔法的「階段與權重」配方,緊湊地記在一張布徹表裡。
對 y' = y、y(0) = 1,用 h = 0.5 走一步中點法:k1 = 1、k2 = f(0.25, 1 + 0.25*1) = 1.25,所以 y_1 = 1 + 0.5*1.25 = 1.625。真值 e^0.5 = 1.6487。前向歐拉法只給 1 + 0.5 = 1.5——中點法多取的這一個斜率樣本約把差距減半,並提供二階準確度。
在一步之內窺探,在更好的點取樣斜率,再加以組合——無需歷史的準確度。
顯式龍格-庫塔法不是萬靈丹:在剛性問題上,無論階多高,它們仍需極小的步長以維持穩定。除非方法是隱式的(或改用 BDF),否則那裡的「高階」是白費的。