向後差分公式(backward-differentiation formula)
當一個問題「剛性」時——意指它把一些極快的模態與慢的混在一起——顯式方法就會卡住,被迫只為了維持穩定而走荒謬地小的步。你需要一個夠強悍、能走大步而不爆掉的隱式方法。向後差分公式正是為此量身打造的隱式多步家族,也是剛性 ODE 求解器內部的標準引擎。
其想法是:不像 Adams 法那樣近似斜率的積分,BDF 改為用一個多項式穿過最近幾個「解值」,並要求它在新點 t_{n+1} 處的「導數」等於斜率 f(t_{n+1}, y_{n+1})。由於它只在新的未知點處用斜率,所以是隱式的——你每步解出 y_{n+1},通常用牛頓法。最簡單的 BDF1 正是後向歐拉法:y_{n+1} - y_n = h*f_{n+1}。BDF2 用兩個過去值:(3/2)*y_{n+1} - 2*y_n + (1/2)*y_{n-1} = h*f_{n+1},是二階。這個家族從 BDF1 走到 BDF6,隨著使用更多歷史而提升階數。
BDF 法的價值在於它們對剛性問題高度穩定:BDF1 與 BDF2 是 A-穩定的(對任何衰減模態、任何步長都穩定),BDF3 到 BDF6 是 A(alpha)-穩定的(除了非常靠近虛軸的模態外都穩定),讓它們能走由準確度而非穩定性所決定的大步。誠實的限制是:由達奎斯特第二障礙,「沒有」階數高於 2 的多步法能是 A-穩定的,所以 BDF3-6 犧牲了一小片穩定區域;BDF7 以上甚至不是零穩定的,毫無用處;而 BDF 會加入數值阻尼,所以對真正持續振盪的問題是錯的。它們是剛性「衰減」的對的工具,而非守恆動力學的。
在剛性系統 y' = -1000y + 1000(快速鬆弛到 y = 1)上,顯式方法在長度為 10 的時間範圍內需要 h 約 0.002 才能保持穩定——約 5000 步。BDF2 因為是 A-穩定的,步長純由準確度決定(也許 h = 0.1,100 步),每步解一個小的牛頓系統。這就是為什麼每個正經的剛性求解器(CVODE、MATLAB 的 ode15s)都建在 BDF 之上。
隱式、用歷史、剛性穩定——剛性衰減的標準引擎。
達奎斯特第二障礙把多步法的 A-穩定上限封在二階,所以只有 BDF1 與 BDF2 是真正 A-穩定的;BDF3-6 僅是 A(alpha)-穩定,而階數高於 6 的 BDF 不是零穩定的,絕不可使用。更多歷史不代表更穩定。