無矩陣方法
無矩陣方法解 A x = b,卻從不組出、甚至從不儲存矩陣 A。乍聽不可能——你怎麼解一個你沒有的系統?訣竅在於:每個克雷洛夫方法(CG、GMRES、BiCGStab)與 A 互動只透過恰好一個運算:它遞給 A 一個向量 v、索取乘積 A v。它從不需要個別元素 a_ij、從不檢視 A 的結構、從不分解它。所以你唯一必須提供的是一個函式——一個黑盒子——給定任意向量 v,回傳 A v。矩陣只隱式存在,就是它所執行的那個作用。
每當乘積 A v 遠比矩陣本身容易計算時,這就帶來解放。一個出色的例子出現在用牛頓法解非線性方程時,每個牛頓步都要解一個以雅可比矩陣 J 為係數的線性系統。顯式地組出 J 可能貴得驚人或極其複雜,但克雷洛夫求解器唯一需要的是 J 乘一個向量——而 J v 不過是一個方向導數,可用單次有限差分近似:J v 約等於 (F(x + epsilon v) - F(x)) / epsilon,只要對函式 F 求值兩次、完全不需雅可比矩陣。這正是無雅可比牛頓-克雷洛夫方法的核心,是大規模非線性模擬的支柱。當 A 是一個巨大的結構化運算子(一個卷積、一個基於 FFT 的求解、一個離散化的積分運算子),其作用便宜、但顯式儲存將龐大或稠密時,無矩陣思維同樣取勝。
這份自由帶著真實的代價。預條件是克雷洛夫方法的命脈,但許多強力的預條件子(如不完全 LU)需要真正的矩陣元素——而無矩陣方法已刻意把它們丟掉。所以無矩陣求解器必須仰賴本身也是無矩陣的、或只用 A 的便宜近似的預條件子,而找到一個好的正是核心挑戰。當乘積以有限差分近似時,還有一個微妙的精度問題:epsilon 太大給出差的雅可比,太小則讓捨入誤差主導,所以步長必須謹慎選取。儘管如此,對最龐大的問題——你即使想存 A 也存不下——無矩陣克雷洛夫方法不是方便,而是必需。
在無雅可比牛頓-克雷洛夫求解器中,每次線性求解都不組出 J。GMRES 只索取 J v,以 J v ~ (F(x + epsilon v) - F(x)) / epsilon 提供——兩次殘差求值。整個非線性偏微分方程的求解全程不組裝任何雅可比矩陣。
只提供作用 v -> A v;矩陣從不顯式存在。
走無矩陣路線省下儲存,卻犧牲了對元素的存取,而多數強力預條件子需要它們——所以最難的部分是建出有效的無矩陣預條件子。而當乘積 A v 以有限差分近似時,擾動 epsilon 必須在截斷誤差與捨入誤差之間取得平衡,正如數值微分一樣。