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

數值線性代數試圖利用精度有限的計算機解決連續的數學問題,因此在自然科學社會科學中的應用同連續數學一樣廣泛。這些問題包括圖像處理信號處理金融工程學材料科學模擬、結構生物學數據挖掘生物資訊學流體動力學和其他很多領域。矩陣方法尤其用於有限差分法有限元法微分方程建模。尼克·特雷費森英語Nick Trefethen和大衛·鮑三世(David Bau III)注意到數值線性代數的廣泛應用,認為它「同微積分和微分方程一樣是數學科學的基礎」,[1]:x儘管是個相對較小的領域。[2]由於矩陣和向量的很多性質也適用於函數和算子,因此數值線性代數也可視作泛函分析中注重實用算法的一支。[1]:ix 數值線性代數中的常見問題如LU分解QR分解奇異值分解特徵分解等,然後可用於解答常見的線性代數問題,如求解線性方程組、定位特徵值、最小平方最佳化等。數值線性代數的核心問題是開發在有限精度計算機上應用真實數據時不會引入誤差的算法,這通常通過迭代法來實現,而非直接方法。

歷史

數值線性代數是由約翰·馮·諾伊曼艾倫·圖靈詹姆斯·哈迪·威爾金森阿爾斯通·斯科特·豪斯霍爾德喬治·福賽思英語George Forsythe海因茨·魯蒂紹爾英語Heinz Rutishauser等計算機先驅開發的,目的是將最早的計算機應用於連續數學問題,如彈道問題與偏微分方程求解。[2]約翰·馮·諾依曼和赫爾曼·戈德斯坦英語Herman Goldstine在1947年的工作中,首次認真嘗試將算法應用於真實數據計算時的誤差降至最低。[3]隨着技術發展,研究者越來越有能力在超大型高精度矩陣解決複雜問題,這一領域也在不斷壯大,而一些數值算法也因並行計算等技術,使其成為解決科學問題的使用方法而日益突出。[2]

矩陣分解

分割矩陣

對應用線性代數中的很多問題,將矩陣視作列向量的組合是很有用的。例如,求解線性系統時,與其將x理解為b的積,不如將x視作bA的列形成的上線性展開的系數向量。[1]:8將矩陣視作列之組合,也是矩陣算法的一種實用方法。這是因為矩陣算法常常包含兩個嵌套的循環,一個是A的列循環,一個是A的行循環。例如,對於矩陣和向量,可以用列劃分的方法計算

for q = 1:n
  for p = 1:m
    y(p) = A(p,q)*x(q) + y(p)
  end
end

奇異值分解

矩陣的奇異值分解是,其中UV么正矩陣對角矩陣的對角項稱作A奇異值。由於奇異值是特徵值的平方根,所以奇異值分解同特徵值分解有緊密聯繫。這意味着,計算奇異值分解的大多數方法都與特徵值方法類似,[1]:36最常用的方法可能涉及豪斯霍德轉換[1]:253

QR分解

矩陣的QR分解是,使得,其中Q正交矩陣R是上三角矩陣[1]:50[4]:223計算QR分解的兩種主要算法是格拉姆-施密特正交化豪斯霍德轉換。QR分解常用於解決線性最小平方問題與特徵值問題(通過迭代QR算法)。

LU分解

矩陣A的LU分解由下三角矩陣L和上三角矩陣U構成,使得。矩陣U通過上三角化過程生成,涉及將A左乘一系列矩陣,以形成積,因此等價地[1]:147[4]:96

特徵值分解

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

算法

高斯消元法

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

線性方程組的解

數值線性代數通常將矩陣視作列向量的組合。對於求解線性方程組,傳統代數方法是將x理解為b的積。數值線性代數則將x理解為bA的列形成的基上現行展開的系數向量。[1]:8

格努矩陣A及向量xb的特徵,可以用很多不同的分解解決線性問題。若,則等價於。這和矩陣分解一樣容易計算。[1]:54A進行特徵分解:,並試圖找到使b,且,則有[1]:33這同使用奇異值分解求解線性系統密切相關,因為矩陣的奇異值是特徵值的絕對值,也等價于格拉姆矩陣特徵值絕對值的平方根。將A進行LU分解得<matdh>A=LU</math>,則可用三角矩陣求解。[1]:147[4]:99

最小平方最佳化

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

條件和穩定性

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

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

迭代法

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

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

軟件

有幾種程式語言用數值線性代數最佳化技術,旨在實現數值線性代數算法。有MATLABAnalyticaMapleMathematica。其他語言也有提供數值線性代數例程與最佳化的庫,如C語言FortranBLASLAPACK等庫,PythonNumPyPerlPerl Data LanguageR語言中的很多數值線性代數命令依賴於LAPACK這些更基本的庫。[5]

參見

參考文獻

閱讀更多

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.