預條件子
預條件是迭代求解中最重要的務實想法——用實務科學家的話說,它往往就是「十步收斂的方法」與「永不收斂的方法」之間的差別。起點的觀察是:每個克雷洛夫方法(CG、GMRES、BiCGStab)在矩陣「好」時收斂得快——良態、或特徵值擠成少數幾個緊密的群——而在矩陣病態、或譜分散時爬行。多數真實矩陣並不好。所以我們不直接解難解的系統 A x = b,而是解一個有相同解、但矩陣友善得多的等價系統。
具體地說,找一個近似 A、但拿來解方程很便宜的矩陣 M,然後解變換後的系統 M^{-1} A x = M^{-1} b(這是左預條件;也有右預條件與分裂預條件變體)。解 x 不變,但迭代現在看到的是矩陣 M^{-1} A 而非 A。若 M 是 A 的好近似,那麼 M^{-1} A 就接近單位矩陣,其特徵值全為 1——完美聚集——而克雷洛夫方法作用在近乎單位矩陣的東西上,幾乎瞬間收斂。整門藝術在於把 M 選得同時「接近 A」(使 M^{-1} A 良態或聚集)又「易求逆」(使每步施加 M^{-1} 都快)。這兩個目標互相打架;完美的預條件子 M = A 會一步收斂,卻和解原問題一樣貴。
常見的選擇橫跨這個取捨。最便宜的是雅可比或對角預條件子,M = A 的對角——幾乎免費,但只有些微幫助。不完全 LU(ILU)或不完全喬列斯基分解,計算 A 的一個近似分解、同時丟掉大部分填入,以中等代價給出強得多的 M。對偏微分方程,多重網格法本身就是極其有效的預條件子。無論你選哪個,心智模型都一樣:預條件子重塑問題的譜,讓迭代有一片好走的地景可下降。把預條件子選對,棘手的求解變成例行公事;選錯,再花俏的克雷洛夫方法也無能為力。
解 A x = b,其中 A 的條件數為 10^6(CG 會爬行)。用一個不完全喬列斯基預條件子 M,預條件後的矩陣 M^{-1} A 條件數降到約 30,帶預條件的 CG 在幾十步、而非數萬步內收斂——相同的答案,工作量大減。
用 M 接近 A 但易求逆的 M^{-1} A 取代 A——譜聚集,收斂飛快。
沒有普遍最佳的預條件子——對的 M 取決於 A 的結構(偏微分方程類型、稀疏性、物理),對某問題出色的預條件子,對另一問題可能無用甚至更慢。建構與施加 M 也耗工,所以真正的衡量是總時間,而非單看迭代次數。