常微分方程的數值方法

顯式與隱式之分

每一種步進方法都從已知的東西算出下一個值 y_(n+1)。下一個值進入公式的方式有兩種。要麼它單獨出現在左邊——給定右側,用普通算術就吐出答案。要麼它出現在「兩邊」,糾纏在公式裡面——那麼「算出」它就意味著解一個方程。第一種是顯式;第二種是隱式。這是數值方法設計中影響最深遠的分岔。

精確地說:顯式方法把 y_(n+1) 寫成(只含已知量的表達式),如尤拉法的 y_(n+1) = y_n + h f(t_n, y_n),或任何經典龍格-庫塔或亞當斯-巴什福斯公式。你算一算就完事。隱式方法則讓 y_(n+1) 出現在右側的 f 裡面,如後向尤拉 y_(n+1) = y_n + h f(t_(n+1), y_(n+1)) 或梯形法則——所以每一步都需要為 y_(n+1) 解一個(通常非線性的)代數方程,多半用牛頓法。隱式步每步貴得多。

那為何要付這個代價?因為隱式方法有大得多的絕對穩定區域。顯式方法只在步長 h 夠小時才保持穩定;對剛性問題,「夠小」可以小到荒謬,逼得你光是爬過一段平靜路程就要走上百萬步。隱式方法卻能在同一段路程上走大而穩定的步。經驗法則是:顯式方法每步較簡單、較便宜,是非剛性問題的預設;隱式方法是剛性問題唯一明智的選擇。真實的求解器常在兩者之間自動切換。

前向(顯式)尤拉:y_(n+1) = y_n + h f(t_n, y_n)——答案直接跳出。後向(隱式)尤拉:y_(n+1) = y_n + h f(t_(n+1), y_(n+1))——y_(n+1) 埋在 f 裡面,所以對例如 f = -100 y,你解 y_(n+1) = y_n - 100 h y_(n+1),得 y_(n+1) = y_n / (1 + 100 h),對任何 h 都穩定。

顯式:直接計算。隱式:解一個方程——但在剛性問題上保持穩定。

隱式並不會自動比顯式更準確——準確度由方法的階決定。隱式方法真正的回報是穩定性,這讓它們能在顯式方法癱瘓的剛性問題上走大步。

又称
explicit methodimplicit method顯式方法與隱式方法顯式對隱式