數值線性代數

數值線性代數，又稱應用線性代數是一門研究在計算機上進行線性代數計算，特別是矩陣運算演算法的學科，是數值分析的一個分支。計算機用浮點數運算，無法精確表示無理數資料，因此計算機演算法應用於資料矩陣時，有時會產生較大的誤差。數值線性代數利用向量和矩陣的性質開發演算法，以最大限度地減少這誤差，同時還要確保演算法儘可能高效。

數值線性代數試圖利用精度有限的計算機解決連續的數學問題，因此在自然科學和社會科學中的應用同連續數學一樣廣泛。這些問題包括影像處理、訊號處理、金融工程學、材料科學模擬、結構生物學、資料探勘、生物資訊學、流體動力學和其他很多領域。矩陣方法尤其用於有限差分法、有限元法和微分方程建模。和大衛・鮑三世（David Bau III）注意到數值線性代數的廣泛應用，認為它 “同微積分和微分方程一樣是數學科學的基礎”，儘管是個相對較小的領域。由於矩陣和向量的很多性質也適用於函式和運算元，因此數值線性代數也可視作泛函分析中注重實用演算法的一支。

數值線性代數中的常見問題如 LU 分解、QR 分解、奇異值分解、特徵分解等，然後可用於解答常見的線性代數問題，如求解線性方程組、定位特徵值、最小二乘最佳化等。數值線性代數的核心問題是開發在有限精度計算機上應用真實資料時不會引入誤差的演算法，這通常透過迭代法來實現，而非直接方法。

歷史

數值線性代數是由約翰・馮・諾伊曼、艾倫・圖靈、詹姆斯・哈迪・威爾金森、阿爾斯通・斯科特・豪斯霍爾德、、等計算機先驅開發的，目的是將最早的計算機應用於連續數學問題，如彈道問題與偏微分方程求解。約翰・馮・諾依曼和在 1947 年的工作中，首次認真嘗試將演算法應用於真實資料計算時的誤差降至最低。隨著技術發展，研究者越來越有能力在超大型高精度矩陣解決複雜問題，這一領域也在不斷壯大，而一些數值演算法也因平行計算等技術，使其成為解決科學問題的使用方法而日益突出。

矩陣分解

2.1 分割矩陣

對應用線性代數中的很多問題，將矩陣視作列向量的組合是很有用的。例如，求解線性系統時，與其將 x 理解為與 b 的積，不如將 x 視作 b 在 A 的列形成的基上線性展開的係數向量。將矩陣視作列之組合，也是矩陣演算法的一種實用方法。這是因為矩陣演算法常常包含兩個巢狀的迴圈，一個是 A 的列迴圈，一個是 A 的行迴圈。例如，對於矩陣和向量、，可以用列劃分的方法計算

for q = 1:n

for p = 1:m

y (p) = A (p,q)*x (q) + y (p)

end

end

2.2 奇異值分解

矩陣的奇異值分解是，其中 U 、V 是酉矩陣，是對角矩陣。的對角項稱作 A 的奇異值。由於奇異值是特徵值的平方根，所以奇異值分解同特徵值分解有緊密聯絡。這意味著，計算奇異值分解的大多數方法都與特徵值方法類似，最常用的方法可能涉及豪斯霍德變換。

2.3 QR 分解

矩陣的 QR 分解是與，使得，其中 Q 是正交矩陣，R 是上三角矩陣。計算 QR 分解的兩種主要演算法是格拉姆 - 施密特正交化與豪斯霍德變換。QR 分解常用於解決問題與特徵值問題（透過迭代）。

2.4 LU 分解

矩陣 A 的 LU 分解由下三角矩陣 L 和上三角矩陣 U 構成，使得。矩陣 U 透過上三角化過程生成，涉及將 A 左乘一系列矩陣，以形成積，因此等價地。

2.5 特徵值分解

矩陣的特徵值分解是，其中 X 的列是 A 的特徵向量，是對角矩陣，對角項是 A 的相應特徵值。目前還沒有直接得到任意矩陣特徵值分解的直接方法，因為程式不可能在有限時間內精確求得任意多項式的根，所以任何通用的特徵值求解器必是迭代的。

演算法

3.1 高斯消元法

從數值線性代數的視角看，高斯消元法是將 A 進行 LU 分解的一種方法。高斯消元法透過將 A 與一系列矩陣左乘來實現，直到 U 是上三角矩陣，L 是下三角矩陣，且。眾所周知，高斯消元法極不穩定，用於有效數字較多的矩陣時誤差巨大。最簡單的解決方法是引入主元，從而得到更穩定的改進高斯消元法。

3.2 線性方程組的解

數值線性代數通常將矩陣視作列向量的組合。對於求解線性方程組，傳統代數方法是將 x 理解為與 b 的積。數值線性代數則將 x 理解為 b 在 A 的列形成的基上現行展開的係數向量。

格努矩陣 A 及向量 x、b 的特徵，可以用很多不同的分解解決線性問題。若，則等價於。這和矩陣分解一樣容易計算。將 A 進行特徵分解：，並試圖找到使的 b，且，則有。這同使用奇異值分解求解線性系統密切相關，因為矩陣的奇異值是特徵值的絕對值，也等價于格拉姆矩陣特徵值絕對值的平方根。將 A 進行 LU 分解得 A=LU，則可用三角矩陣求解。

3.3 最小二乘最佳化

矩陣分解提出了許多解線性方程組的方法，其中我們尋求最小的 r，如迴歸問題。QR 演算法計算 A 的既約 QR 分解並重排，得到。此上三角方程組可用於解 x。SVD 還提供了一種獲得線性最小二乘的演算法：計算既約 SVD 分解，並計算向量，就可以將最小二乘問題簡化為簡單的對角方程組。QR 分解和 SVD 分解可以產生最小二乘解，這意味著除了用經典正規方程法解最小二乘問題外，還可用格拉姆 - 施密特法、豪斯霍德法等方法。

條件和穩定性

假設問題是函式，其中 X 是資料的賦範向量空間，Y 是解的賦範向量空間。對於資料點，若 x 的微小擾動會導致的值發生很大變化，則稱之為病態的（ill-conditioned）。可以定義條件數量化之，代表問題的完備程度：

不穩定性是指依賴浮點運算的計算機演算法的結果與問題的精確解產生差距的趨勢。矩陣包含多位有效數字的真實資料時，很多解線性方程組或最小二乘最佳化的演算法會產生不準確的解。為病態問題建立穩定演算法是數值線性代數的核心問題，例如豪斯霍德三角化是線性方程組的很穩健的解法，而解最小二乘法的正規方程法不穩定，是奇異值分解更常用的一個原因。有些矩陣分解方法可能不穩定，但可以直接修改而變得穩定，例如格拉姆 - 施密特法可以很容易地改成改進格拉姆 - 施密特法；高斯消元法不穩定，引入主元后變得穩定。

迭代法

迭代法成為數值線性代數重要組成有兩個原因。其一，很多重要的數值問題沒有直接解，如求任意矩陣的特徵值和特徵向量。其二，對任意矩陣的非迭代演算法需要時間，而矩陣只含個數字，這個下限非常高。迭代法可利用矩陣的特點縮短時間。例如對稀疏矩陣，迭代演算法可跳過很多直接方法必須的步驟，即便它們在矩陣高度結構化的情形下是多餘的。

數值線性代數中，很多迭代法的核心是將矩陣投影到低維克雷洛夫子空間，這樣就可從低維空間開始迭代計算類似矩陣的等效特徵，依次向高維移動以逼近高維矩陣的特徵。對對稱的 A，解線性方程時，經典迭代法是共軛梯度法。A 若不對稱，則迭代法有廣義最小殘量方法和 CGN（正規方程共軛梯度法）。若 A 對稱，則解特徵值、特徵向量問題時，可以用蘭佐斯演算法；A 不對稱時，可以用阿諾德迭代法。

軟體

有幾種程式語言用數值線性代數最佳化技術，旨在實現數值線性代數演算法。有 MATLAB、Analytica、Maple 和 Mathematica。其他語言也有提供數值線性代數例程與最佳化的庫，如 C 語言及 Fortran 有 BLAS、LAPACK 等庫，Python 有 NumPy，Perl 有 Perl Data Language。R 語言中的很多數值線性代數命令依賴於 LAPACK 這些更基本的庫。

閱讀更多

J. H. Wilkinson and C. Reinsch, "Linear Algebra, volume II of Handbook for Automatic Computation" SIAM Review 14, 658 (1972).

Golub, Gene H.; van Loan, Charles F. (1996), Matrix Computations, 3rd edition, Johns Hopkins University Press, ISBN 978-0-8018-5414-9