常微分方程的數值方法

時間推進(time-stepping)

你無法像大自然展開連續軌跡那樣在電腦上觀看它——機器只能做有限次算術運算。所以你不取平滑的流動,而是走一連串離散的跳躍:從現在所在的位置,估計稍後會到哪裡,跳過去,再重複。時間推進就是這種一跳接一跳的行進,把連續的微分方程變成一連串明確的計算。

具體而言,你把連續的時間軸換成格點 t0、t1、t2、...,通常以固定步長 h 間隔,使 t_{n+1} = t_n + h。你保留真解 y(t_n) 的近似值 y_n,而一條推進規則(數值方法)告訴你如何由 y_n(也許還有在一或多點處算出的 f)算出 y_{n+1}。最簡單的規則,前向歐拉法,就只沿著當下斜率走一步:y_{n+1} = y_n + h * f(t_n, y_n)。更準確的規則會在一步之內先在多處取樣斜率,再決定如何前進。無論如何,你都把 t0 -> t1 -> t2 -> ... 推進到你關心的時間,而離散數列 y_0、y_1、y_2、... 就是你的數值解。

時間推進的核心藏著兩股誠實的張力。較小的步長 h 較「準確」(每步誤差通常以 h 的某次方縮小),但代價更高,因為要走更多步才能涵蓋同一段時間。而較小不自動代表較安全:在某些(顯式)方法配上某些(剛性)問題時,步長太大不只是失去準確度——它會讓算出的解爆掉,儘管真解正安詳地衰減。因此選步長是準確度、成本與穩定性之間的權衡,自適應求解器會即時調整 h,讓三者都受控。

用前向歐拉法以 h = 0.1 推進 y' = y、y(0) = 1:y_1 = 1 + 0.1*1 = 1.1、y_2 = 1.1 + 0.1*1.1 = 1.21、y_3 = 1.331、... 十步之後到達 t = 1,得 y_10 = 1.1^10 = 2.594,而真值是 e = 2.718。更小的 h 會縮小這個差距;更聰明地取樣斜率(RK4)則縮得快得多。

連續的流動化為一連串大小為 h 的離散跳躍。

時間推進絕不會產生精確軌跡——只在格點上取樣,每個值都帶誤差。格點之間靠內插,而「恰好結束在 t = 1」可能需要最後補一小步,或在兩個格點之間擠出一個值。

又稱
marchingtime integrationstepping forward步進時間積分