JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

正確實現直接求解器:選主元、浮點運算次數與何時止步

樸素的高斯消元是一顆後向不穩定的炸彈。本篇說明選主元為何能拆除它,統計支配成本的浮點運算次數,利用稀疏性,並畫出直接法退場、迭代法接手的那條界線。

為何樸素消元會爆炸

第一卷的高斯消元把每一列除以它的主元。若主元很小,乘數就變得巨大,而巨大的乘數會放大資料中已有的捨入誤差。結果是一團後向不穩定的亂麻:你算出的答案所求解的問題,與你提出的問題相去甚遠。在精確算術下消元能處理得很好的同一個矩陣,在浮點下可能丟光每一位數字。

Solve  [1e-20, 1; 1, 1] x = [1; 2]   in double precision.
True answer is essentially  x = (1, 1).

NAIVE (pivot = 1e-20):
  multiplier = 1 / 1e-20 = 1e20
  row2 <- row2 - 1e20 * row1
        = [0,  1 - 1e20]  ->  fl gives [0, -1e20]   (the '1' vanished!)
  back-substitute:  x2 = 1,  x1 = (1 - x2)/1e-20 = 0   WRONG

WITH PARTIAL PIVOTING (swap so pivot = 1):
  rows: [1, 1; 1e-20, 1],  multiplier = 1e-20
  row2 <- [0, 1 - 1e-20] = [0, 1]   (no information lost)
  back-substitute:  x2 = 1,  x1 = 1   CORRECT
一個 2x2 例子:樸素消元返回 x1 = 0,而選主元返回正確的 x1 = 1。

部分選主元:標準的修復方法

解藥是部分選主元:在消去第 k 行之前,交換列使該行中絕對值最大的元素位於對角線上。這迫使每個乘數滿足 |m| <= 1,於是它們再也無法放大誤差。形式上它計算分解 P A = L U,其中 P 記錄列交換、L 的元素以單位為界——這就是你在第一卷見過的LU 分解,如今變得安全。

計算成本:浮點運算次數與稀疏性

成本以浮點運算次數度量——即浮點運算。稠密 n x n 矩陣的 LU 分解約需 (2/3) n^3 次浮點運算;之後每次三角求解僅為 O(n^2)。這種不對稱正是「分解一次、反覆複用」的原因:對十個不同的右端項 b 求解,代價是一次立方分解加十次廉價的二次求解,而非十次分解。

n^3 這堵牆殘酷無比:n 翻倍,成本增長八倍。對於離散化偏微分方程產生的巨型系統——數百萬個未知量——直接分解根本不可能。但這些矩陣通常是稀疏的:幾乎所有元素都為零。稀疏矩陣方法只儲存並運算非零元,而核心危險是填充:消元會把結構零變成非零,破壞稀疏性。重排行列以最小化填充,正是稀疏直接求解器的全部技藝。