這個計算機能做什麼
本工具會在區間 [x0, xn] 上,以二階 Runge-Kutta 法(即中點法/改良型尤拉法的 RK2 格式)數值求解一個形如 \(y'' = F(x, y, y')\) 的二階常微分方程。你只需把方程右側的 F 寫成以 x、y 與 p(其中 p 代表 y')為變數的算式,再給定初始值 y(x0)、y'(x0)、區間端點與步數即可。計算結果會列出整個區間上一連串 (x, y, y') 的數值表。由於這純屬數值分析,計算方法在世界各地完全相同,沒有地區差異。
使用方法
請以 x、y、p 寫出強迫函數 F,例如要計算 \(y'' = -4y' - 4y\),就輸入 -4*p-4*y。支援的運算子有 + - * / ^(或 **),函數則包含 sin、cos、tan、exp、log、ln、sqrt、abs、pow,並可使用常數 pi、e。接著設定 x0、初始的 y0 與 y'0 = p0、終點 xn,並選擇子區間數 n。步數越多,步長 \(h = (x_n - x_0)/n\) 越小,誤差也越低(全域誤差為 \(O(h^2)\))。
公式解析
首先令 \(p = y'\),把方程降為一階系統,得到 \(y' = p\) 與 \(p' = F(x, y, p)\)。每一個 RK2 步驟都會分別在起點與中點取樣斜率,再加以結合:先算 \(j_1 = h \cdot F(x,y,p)\)、\(k_1 = h \cdot p\),接著在中點計算 \(j_2\) 與 \(k_2\),並用來推進 p 與 y。每一步的局部截斷誤差為 \(O(h^3)\)。
$$\begin{cases} y' = p \\ p' = F(x,y,p) \end{cases} \qquad h = \dfrac{x_n - x_0}{n}$$ $$\begin{aligned} y_{i+1} &= y_i + h\,p\!\left(x_i + \tfrac{h}{2}\right) \\ p_{i+1} &= p_i + h\,F\!\left(x_i + \tfrac{h}{2},\; y_i + \tfrac{h}{2}p_i,\; p_i + \tfrac{h}{2}F_i\right) \end{aligned}$$
範例演算
取 F = -4*p-4*y、x0 = 0、y0 = 0、p0 = 1、xn = 1、n = 50,則步長為 \(h = 0.02\)。第一步得到 \(y_1 = 0.0192\)、\(p_1 = 0.9224\)。一路迭代到 \(x = 1\) 時,可得 \(y(1) \approx 0.13533\)、\(y'(1) \approx -0.13533\),與精確解 \(y = x \cdot e^{-2x}\) 在 \(x = 1\) 處的值 \(e^{-2} = 0.135335\) 相當吻合。
常見問答
這是 RK2 還是 RK4?本工具採用的是二階 Runge-Kutta(中點法),並非經典的四階方法,因此全域精度只到二階。
xn 可以小於 x0 嗎?可以。此時步長會變成負值,積分將往回(反向)進行,這在數學上是完全成立的。
為什麼出現了錯誤的列?當 F 內部發生計算問題時——例如除以零、對非正數取對數,或對負數開平方根——積分就會中止,並標示出發生的位置。