線性代數
|
![{\displaystyle \mathbf {A} ={\begin{bmatrix}1&2\\3&4\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a31efc33ac33577d719a3ccd162a9bf21e4847ea)
|
向量 · 向量空間 · 基底 · 行列式 · 矩陣
|
|
|
在線性代數與數值分析中,LU分解是矩陣分解的一種,將一個矩陣分解為一個下三角矩陣和一個上三角矩陣的乘積,有時需要再乘上一個置換矩陣。LU分解可以被視為高斯消去法的矩陣形式。在數值計算上,LU分解經常被用來解線性方程組、且在求逆矩陣和計算行列式中都是一個關鍵的步驟。
對於方陣
,
的 LU 分解是將它分解成一個下三角矩陣 L 與上三角矩陣 U 的乘積,也就是
![{\displaystyle A=LU}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7a9af953d6ffa260c3f7ffa75edc63edc006c64d)
如果適當的改變
的行的順序或列的順序,就可以將
做 LU 分解。
舉例來說一個
的矩陣 A ,其 LU 分解會寫成下面的形式:
。
事實上,並不是每個矩陣都有 LU 分解。例如,從上式可知
,若
,則
或
等於 0,故 L 或 U 是非可逆矩陣,A 必須也是非可逆矩陣。然而,存在著可逆矩陣 A 滿足
,這些 A 就是沒有 LU 分解的例子。該問題可藉由置換 A 的各列順序來解決,最終會得到一個 A 的 PLU 分解。
PLU 分解[編輯]
方陣 A 的 PLU 分解是是將它分解成一個置換矩陣 P、一個下三角矩陣 L 與上三角矩陣 U 的乘積,即
![{\displaystyle A=PLU}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b1c868db7cbf6d12347a35d0ec03088708b48f17)
事實上,所有的方陣都可以寫成 PLU 分解的形式,由於左乘置換矩陣
是在交換行的順序,所以由
推得適當的交換 A 的行的順序,即可將 A 做 LU 分解。事實上,PLU 分解有很高的數值穩定性,因此實用上是很好用的工具。
有時為了計算上的方便,會同時間換行與列的順序,此時會將 A 分解成
![{\displaystyle A=PLUQ}](https://wikimedia.org/api/rest_v1/media/math/render/svg/14a53567cc99a534768372f651b77f762d2d051e)
其中 P、L、U 同上,Q 是一個置換矩陣。
LDU 分解[編輯]
方陣 A 的 LDU 分解是是將它分解成一個單位下三角矩陣 L、對角矩陣 D 與單位上三角矩陣 U 的乘積,即
![{\displaystyle A=LDU}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9854740b03dca7ae7a902656f1056d505ca6c694)
其中單位上、下三角矩陣是指對角線上全是 1 的上、下三角矩陣。
事實上,LDU 分解可以推廣到 A 是一般的矩陣,而非方陣。此時,L 和 D 是方陣,並且與 A 有相同的列,U 則有和 A 相同的長寬。注意到現在 U 是上三角的定義改為主對角線的下方都是 0,而主對角線是收集所有
滿足 i=j。
存在性和唯一性[編輯]
一個可逆矩陣可以進行LU分解若且唯若它的所有子式都非零。如果要求其中的L矩陣(或U矩陣)為單位三角矩陣,那麼分解是唯一的。同理可知,矩陣的LDU可分解條件也相同,並且總是唯一的。
即使矩陣不可逆,LU仍然可能存在。實際上,如果一個秩為k的矩陣的前k個順序主子式不為零,那麼它就可以進行LU分解,但反之則不然。
目前,在任意域上一個方塊矩陣可進行LU分解的充要條件已經被發現,這些充要條件可以用某些特定子矩陣的秩表示。用高斯消去法來得到LU分解的算法也可以擴張到任意域上。
任意矩陣A(不僅僅是方塊矩陣)都可以進行LUP分解。其中的L和U矩陣是方陣,P矩陣則與A形狀一樣。
正定矩陣[編輯]
如果矩陣A是埃爾米特矩陣,並且是正定矩陣,那麼可以使,U是L的共軛轉置。也就是說,A可以寫成
![{\displaystyle A=LL^{*}\ }](https://wikimedia.org/api/rest_v1/media/math/render/svg/bdcbae21c3540f3a575371bf894256e8739c9a17)
這個分解被稱作Cholesky分解。對每一個正定矩陣,Cholesky分解都唯一存在。此外,比起一般的LU分解,計算Cholesky分解更為快捷,並具有更高的數值穩定性。
具體的表達式[編輯]
由於LDU分解唯一存在,對給定的矩陣,可以給出相應三個矩陣L、D和U的具體的表達式。表達式由A的主子式之比構成(因此要求它們不為零)。設
為矩陣D的對角線係數,則有
。對
,
的值等於A的第
個順序主子式與第
個順序主子式之比,其中約定
=1。
LU分解在本質上是高斯消去法的一種表達形式。實質上是將A通過初等行轉換變成一個上三角矩陣,其轉換矩陣就是一個單位下三角矩陣。這正是所謂的杜爾里特算法(Doolittle algorithm):從下至上地對矩陣A做初等行轉換,將對角線左下方的元素變成零,然後再證明這些行轉換的效果等同於左乘一系列單位下三角矩陣,這一系列單位下三角矩陣的乘積的逆就是L矩陣,它也是一個單位下三角矩陣。
這類算法的複雜度一般在
左右,對充分消去的分解則不然。
杜爾里特算法[編輯]
對給定的N × N矩陣
![{\displaystyle A=(a_{n,n})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f154f1d810f5aace3688729f403e0f3dc65303a5)
有
![{\displaystyle A^{(0)}:=A}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d429e70e2b4b2bdeaeeab8bd007874831d8bbfce)
然後定義對於n = 1,...,N-1的情況如下:
在第n步,消去矩陣A(n-1)的第n列主對角線下的元素:將A(n-1)的第n行乘以
之後加到第i行上去。其中
。
這相當於在A(n-1)的左邊乘上一個單位下三角矩陣:
![{\displaystyle L_{n}={\begin{bmatrix}1&&&&&0\\&\ddots &&&&\\&&1&&&\\&&l_{n+1,n}&\ddots &&\\&&\vdots &&\ddots &\\0&&l_{N,n}&&&1\\\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f88cf2ec7e51173e9a0cfe1f56a7bd91320f4d83)
於是,定義為:設
![{\displaystyle A^{(n)}:=L_{n}A^{(n-1)}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ada47c1808d81edfffc12f1ee14e3f2edb05c6f4)
經過N-1輪操作後,所有在主對角線下的係數都為0了,於是我們得到了一個上三角矩陣:A(N-1),這時就有:
![{\displaystyle A=L_{1}^{-1}L_{1}A^{(0)}=L_{1}^{-1}A^{(1)}=L_{1}^{-1}L_{2}^{-1}L_{2}A^{(1)}=L_{1}^{-1}L_{2}^{-1}A^{(2)}=\ldots =L_{1}^{-1}\ldots L_{N-1}^{-1}A^{(N-1)}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ae67abf5eea098e32ed87ec0a791572bbc7497df)
這時,矩陣A(N-1) 就是U,
。
下三角矩陣
的逆依然是下三角矩陣,而且下三角矩陣的乘積仍是下三角矩陣,所以
是下三角矩陣。
於是我們得到分解:
。
顯然,要是算法成立,在每步操作時必須有
。如果這一條件不成立,就要將第n行和另一行交換,由此就會出現一個置換矩陣P。這就是為什麼一般來說LU分解里會帶有一個置換矩陣的原因。
將一個簡單的3×3矩陣A進行LU分解:
![{\displaystyle A={\begin{bmatrix}1&2&3\\2&5&7\\3&5&3\\\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7cbb8edc31a11460ca1f1f27e77419dde46d9a06)
先將矩陣第一列元素中a11以下的所有元素變為0,即
![{\displaystyle L_{1}A={\begin{bmatrix}1&0&0\\-2&1&0\\-3&0&1\\\end{bmatrix}}\times {\begin{bmatrix}1&2&3\\2&5&7\\3&5&3\\\end{bmatrix}}={\begin{bmatrix}1&2&3\\0&1&1\\0&-1&-6\\\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/301f71a3746854dc8c2b1e08d90f0d2cc398d1b4)
再將矩陣第二列元素中a22以下的所有元素變為0,即
![{\displaystyle L_{2}(L_{1}A)={\begin{bmatrix}1&0&0\\0&1&0\\0&1&1\\\end{bmatrix}}\times {\begin{bmatrix}1&2&3\\0&1&1\\0&-1&-6\\\end{bmatrix}}={\begin{bmatrix}1&2&3\\0&1&1\\0&0&-5\\\end{bmatrix}}=U}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9d8ff8fe4a20a073bde463e9f9c5cdd41dd21024)
![{\displaystyle L=L_{1}^{-1}L_{2}^{-1}={\begin{bmatrix}1&0&0\\2&1&0\\3&0&1\\\end{bmatrix}}\times {\begin{bmatrix}1&0&0\\0&1&0\\0&-1&1\\\end{bmatrix}}={\begin{bmatrix}1&0&0\\2&1&0\\3&-1&1\\\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d566301a88ecb946d5ee373925b846f0f4df835f)
還有一種方法是通過方程式求解,如下所示,將以下矩陣進行LU分解:
![{\displaystyle {\begin{bmatrix}4&3\\6&3\\\end{bmatrix}}={\begin{bmatrix}l_{11}&0\\l_{21}&l_{22}\\\end{bmatrix}}{\begin{bmatrix}u_{11}&u_{12}\\0&u_{22}\\\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e3bffa55afd892c21a8204107b7f2ac79c981118)
由於矩陣階數只是2,可以直接列方程式解:
![{\displaystyle l_{11}*u_{11}+0*0=4}](https://wikimedia.org/api/rest_v1/media/math/render/svg/34f56126e1750f5ff8b5bbffef151fb73bb2dc82)
![{\displaystyle l_{11}*u_{12}+0*u_{22}=3}](https://wikimedia.org/api/rest_v1/media/math/render/svg/28eb8320fdd40a4238993e293ebfc23528303efc)
![{\displaystyle l_{21}*u_{11}+l_{22}*0=6}](https://wikimedia.org/api/rest_v1/media/math/render/svg/70f9e3eec171d9a16177a496b70c6782d87f3363)
![{\displaystyle l_{21}*u_{12}+l_{22}*u_{22}=3}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4245dc407fc4606e7c265cc6fc6b225970ccde6a)
這個線性方程組有無數多組解。因此,可以假設其中一個是單位三角矩陣,比如說L,也就是說其對角線上的兩個係數都是1。這時可以解出:
![{\displaystyle l_{21}=1.5}](https://wikimedia.org/api/rest_v1/media/math/render/svg/bdd18640f9cf46fe7f78a66c2aca8f9e9b9b23a4)
![{\displaystyle u_{11}=4}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e3b99dd7ef05e761c13eab258904957626eefb39)
![{\displaystyle u_{12}=3}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f859b1def91aa9b68ba7cba0a0165b1f70ac612b)
。
也就是說
![{\displaystyle {\begin{bmatrix}4&3\\6&3\\\end{bmatrix}}={\begin{bmatrix}1&0\\1.5&1\\\end{bmatrix}}{\begin{bmatrix}4&3\\0&-1.5\\\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/166c4b24c9dd37bc2c7ff63300cf9d07df0dc167)
稀疏矩陣分解[編輯]
對於階數很大的稀疏矩陣,有特別的簡便算法來獲得其LU分解:這時的L和U也是稀疏矩陣。理論上來說,算法的複雜度約等於非零係數的個數,而不是矩陣的大小階數。這些算法通過運用行和列的交換,使得過程中零係數因為操作而變成非零係數的次數減到最少。
一般的將零係數因為操作而變成非零係數的次數減到最少的方法是運用圖論。
求解線性方程式[編輯]
對於給定的線性方程組
![{\displaystyle Ax=LUx=b\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/64637a56a20b046480b5c1d466d16ab8b2d4bf01)
要解出x,可以進行以下步驟:
- 首先,解方程式
得到
;
- 然後解方程式
得到
。
在兩次的求解中,我們遇到的都是三角矩陣,因此運用向前(向後)替代法就可以簡潔地求解(參見三角矩陣),而不需要用到高斯消去法。然而,在將A進行LU分解時,仍然要用到高斯消去法。因此,這個方法適合在要對許多個不同的b求解時用。
求逆矩陣[編輯]
求矩陣A的逆時,可以直接求L和U的逆矩陣,然後代入:
。也可以將單位矩陣分解成n個列向量,然後用上面求解線性方程式的方法解出逆矩陣的列向量,然後拼起來。後者的複雜度在n2級別[來源請求],較高斯法為優。
計算行列式[編輯]
矩陣
和
可以用來快速地計算矩陣
的行列式,因為det(A) = det(L) det(U),而三角矩陣的行列式就是對角線元素的乘積。如果要求L 是單位三角矩陣,那麼
同樣的方法也可以應用於LUP分解,只需乘上P的行列式,即相應置換的符號差。
參考來源[編輯]
- Trefethen, Lloyd; Bau, David, Numerical Linear Algebra
- Cormen, T.H.; Leisserson, C.E; Rivest, R.L., Introduction to Algorithms
- Golub, Gene H.; Van Loan, Charles F., Matrix Computations 3rd, Baltimore: Johns Hopkins, 1996, ISBN 978-0-8018-5414-9 .
- Horn, Roger A.; Johnson, Charles R., Matrix Analysis, Cambridge University Press, 1985, ISBN 0-521-38632-2 . See Section 3.5.
- Okunev, Pavel; Johnson, Charles, Necessary And Sufficient Conditions For Existence of the LU Factorization of an Arbitrary Matrix, 1997, .
- Householder, Alston, The Theory of Matrices in Numerical Analysis, 1975 .
- LU decomposition (頁面存檔備份,存於網際網路檔案館) on MathWorld.
- LU decomposition (頁面存檔備份,存於網際網路檔案館) on Math-Linux.
- LU decomposition (頁面存檔備份,存於網際網路檔案館)
外部連結[編輯]