常微分方程的數值方法

布徹表(Butcher tableau)

/ BUTCH-er /

每個龍格-庫塔法不過是一組特定的指令:在一步之「內」何處取樣每個斜率、如何由先前的斜率建出每個取樣點、以及最後一步如何加權所有樣本。用文字寫出這些選擇很笨拙。布徹表(以 John Butcher 命名)就是把這一切收進一個整齊網格的緊湊記帳表,因此任一龍格-庫塔法都由它的布徹表完整指定。

這張表有三塊數字:一欄「節點」c_i(每個階段取樣斜率所在的步長分數)、一個三角形的係數矩陣 a_ij(階段 i 的取樣點如何由先前斜率 k_1..k_{i-1} 建出)、以及一列「權重」b_i(最後一步如何混合所有階段斜率)。各階段為 k_i = f(t_n + c_i*h, y_n + h*sum_j a_ij*k_j),而步驟是 y_{n+1} = y_n + h*sum_i b_i*k_i。若 a 矩陣嚴格下三角(每個階段只用更早的階段),方法是「顯式」的,你依序算出各 k;若 a_ij 在對角線上或之上有值,某階段依賴自身,方法便是「隱式」的,各階段必須同時求解。例如 RK4 的布徹表,節點為 0、1/2、1/2、1,權重為 1/6、1/3、1/3、1/6。

為什麼要用表?因為它讓方法一目了然地可比較、可檢驗。「階條件」——a、b、c 為達到某階所必須滿足的代數方程——可直接用布徹表的元素表述(例如相容性要 sum_i b_i = 1,二階要 sum_i b_i*c_i = 1/2)。它讓你一眼看出方法是顯式還是隱式、數出它的階段數(成本),並認出嵌入對(兩列權重共用同一組階段)。布徹表是龍格-庫塔法的通用「原始碼」,就像食譜卡記下一道菜。

中點法的布徹表:節點 c = (0, 1/2);a 矩陣有 a_21 = 1/2(階段 2 用 k1 走到一半);權重 b = (0, 1)。把它讀回來:k1 = f(t_n, y_n)、k2 = f(t_n + h/2, y_n + (h/2)*k1)、y_{n+1} = y_n + h*k2——正是中點法則。嚴格下三角的 a 矩陣標示它是顯式的。

節點 c、係數 a、權重 b——一個網格裝下任一龍格-庫塔法的完整基因。

嚴格下三角的 a 矩陣代表顯式(逐一算出各階段);對角線上或之上有任何元素就代表隱式(各階段耦合,須一起求解,通常用牛頓法)。布徹表的「結構」而不只是數字,告訴你成本與穩定性的性格。

又称
Butcher arrayRunge-Kutta tableau巴徹表龍格庫塔係數表