[矩陣的三角分解系列一] 高斯消元法

矩陣的三角分解是求解線性方程組經常使用的方法,包括LU分解,LDU分解,杜利特(Doolittle)分解,克勞特(Crout)分解,LLT(喬累斯基Cholesky)分解,LDLT(不帶平方根喬累斯基)分解等,以及爲了知足分解條件又加入行列變換的LPU分解,PLU分解,LUP分解,LDPU分解等。這裏矩陣的三角分解系列教程主要是針對在學習三角分解時候的涉及到的一些細節,包括不少方法的來源和證實等,以及其中用到的一些矩陣操做的基礎知識,主要包括:html

這個系列後面文章會用到前面文章的理論和技術,因此建議按照順序查看。web

簡介

這裏講解高斯消元法的主要是以矩陣語言來描述高斯消元這個過程,而後主要是爲後面的矩陣的三角分解打下基礎。矩陣的三角分解推導以及證實的過程須要依賴高斯消元的理論基礎。
具體來講高斯消元法的基本思想就是利用矩陣的初等行變換把求解 A x = b \mathbf{Ax=b} Ax=b中的矩陣 A \mathbf{A} A轉成上三角矩陣,須要注意這裏講解矩陣變換過程當中不會利用到矩陣行交換。svg

矩陣行交換後面某些文章中會講到,由於矩陣 A \mathbf{A} A的三角分解須要矩陣知足必定的條件,若是條件不知足,能夠考慮交換矩陣 A \mathbf{A} A的兩行,固然這個行變換後也再也不是矩陣 A \mathbf{A} A了。這樣對於處理解線性方程組來講,至關於調整方程的順序,對解不產生影響,可是能夠使三角分解進行下去。學習

高斯消元過程

n n n元線性方程組爲
{ a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 , a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 , ⋮ a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n , (1) \begin{cases} a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n=b_1, \\ a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n=b_2, \\ \vdots \\ a_{n1}x_1+a_{n2}x_2+\cdots+a_{nn}x_n=b_n, \end{cases} \tag{1} a11x1+a12x2++a1nxn=b1,a21x1+a22x2++a2nxn=b2,an1x1+an2x2++annxn=bn,(1)
轉出矩陣表示爲
A x = b (2) \mathbf{Ax=b} \tag{2} Ax=b(2)
其中
A = ( a i j ) n × n , x = ( x 1 , x 2 , … , x n ) T , b = ( b 1 , b 2 , ⋯   , b n ) T . \mathbf{A}=(a_{ij})_{n\times n},\mathbf{x}=(x_1,x_2,\dots,x_n)^\mathrm{T},\mathbf{b}=(b_1,b_2,\cdots,b_n)^\mathrm{T}. A=(aij)n×n,x=(x1,x2,,xn)T,b=(b1,b2,,bn)T.
A \mathbf{A} A進行高斯消元的主要過程spa

  1. 未進行高斯消元時
    A ( 1 ) = A = [ a 11 ( 1 ) a 12 ( 1 ) ⋯ a 1 n ( 1 ) a 21 ( 1 ) a 22 ( 1 ) ⋯ a 2 n ( 1 ) ⋮ ⋮ ⋮ a n 1 ( 1 ) a n 2 ( 1 ) ⋯ a n n ( 1 ) ] (3) \mathbf{A^{(1)}}=\mathbf{A}=\left[ \begin{matrix} a_{11}^{(1)} & a_{12}^{(1)} & \cdots & a_{1n}^{(1)} \\ a_{21}^{(1)} & a_{22}^{(1)} & \cdots & a_{2n}^{(1)} \\ \vdots & \vdots & & \vdots \\ a_{n1}^{(1)} & a_{n2}^{(1)} & \cdots & a_{nn}^{(1)} \end{matrix} \right] \tag{3} A(1)=Aa11(1)a21(1)an1(1)a12(1)a22(1)an2(1)a1n(1)a2n(1)ann(1)(3)
    其中右上角括號內的標號表示進行 i i i次高斯消元后改變的值。
  2. 若是矩陣 A ( 1 ) \mathbf{A^{(1)}} A(1)的主元素 a 11 ( 1 ) ≠ 0 a_{11}^{(1)} \neq 0 a11(1)=0,那麼從第2行到第n行能夠減去 a i 1 ( 1 ) / a 11 ( 1 ) a_{i1}^{(1)} / a_{11}^{(1)} ai1(1)/a11(1)其中 i = 2 , 3 , ⋯   , n i=2,3,\cdots,n i=2,3,,n,這樣操做的目的是把 A ( 1 ) \mathbf{A^{(1)}} A(1)第1列上從第2個到第n個元素所有變爲0。可得
    A ( 2 ) = [ a 11 ( 1 ) a 12 ( 1 ) ⋯ a 1 n ( 1 ) 0 a 22 ( 2 ) ⋯ a 2 n ( 2 ) ⋮ ⋮ ⋮ 0 a n 2 ( 2 ) ⋯ a n n ( 2 ) ] \mathbf{A^{(2)}}=\left[ \begin{matrix} a_{11}^{(1)} & a_{12}^{(1)} & \cdots & a_{1n}^{(1)} \\ 0 & a_{22}^{(2)} & \cdots & a_{2n}^{(2)} \\ \vdots & \vdots & & \vdots \\ 0 & a_{n2}^{(2)} & \cdots & a_{nn}^{(2)} \end{matrix} \right] A(2)a11(1)00a12(1)a22(2)an2(2)a1n(1)a2n(2)ann(2)
    其中右上角括號變爲2的那些元素以及上面提到的變爲0的那些元素是此次高斯消元操做變化的那些元素。
    若是
    l i 1 = a i 1 ( 1 ) / a 11 ( 1 ) , a i j ( 2 ) = a i j ( 1 ) − l i 1 a 1 j ( 1 ) , i , j = 2 , 3 , ⋯   , n , \begin{aligned} l_{i1} & = a_{i1}^{(1)} / a_{11}^{(1)}, \\ a_{ij}^{(2)} & = a_{ij}^{(1)} - l_{i1}a_{1j}^{(1)}, \qquad i,j=2,3,\cdots,n, \end{aligned} li1aij(2)=ai1(1)/a11(1),=aij(1)li1a1j(1),i,j=2,3,,n,
    一共須要進行 n − 1 n-1 n1次的倍加初等變換,至關於 A ( 1 ) \mathbf{A^{(1)}} A(1)左乘 n − 1 n-1 n1個倍加陣
    A ( 2 ) = I ( 1 , n ( − l n 1 ) ) ⋯ I ( 1 , n ( − l 21 ) ) A ( 1 ) . L ( 1 ) = I ( 1 , n ( − l n 1 ) ) ⋯ I ( 1 , n ( − l 21 ) ) = [ 1 − l 21 1 ⋮ ⋱ − l n 1 1 ] = [ 1 − a 21 ( 1 ) a 11 ( 1 ) 1 ⋮ ⋱ − a n 1 ( 1 ) a 11 ( 1 ) 1 ] . (4) \begin{aligned} \mathbf{A^{(2)}} & = \mathbf{I}(1, n(-l_{n1}))\cdots\mathbf{I}(1, n(-l_{21}))\mathbf{A^{(1)}}. \\ \mathbf{L^{(1)}} & = \mathbf{I}(1, n(-l_{n1}))\cdots\mathbf{I}(1, n(-l_{21})) \\ & = \left[ \begin{matrix} 1 \\ -l_{21} & 1 \\ \vdots & & \ddots & \\ -l_{n1} & & & 1 \end{matrix} \right] = \left[ \begin{matrix} 1 \\ -\frac{a_{21}^{(1)}}{a_{11}^{(1)}} & 1 \\ \vdots & & \ddots & \\ -\frac{a_{n1}^{(1)}}{a_{11}^{(1)}} & & & 1 \end{matrix} \right] \end{aligned} . \tag{4} A(2)L(1)=I(1,n(ln1))I(1,n(l21))A(1).=I(1,n(ln1))I(1,n(l21))=1l21ln111=1a11(1)a21(1)a11(1)an1(1)11.(4)
    因此
    A ( 2 ) = L ( 1 ) A ( 1 ) = [ a 11 ( 1 ) a 12 ( 1 ) ⋯ a 1 n ( 1 ) 0 a 22 ( 2 ) ⋯ a 2 n ( 2 ) ⋮ ⋮ ⋮ 0 a n 2 ( 2 ) ⋯ a n n ( 2 ) ] . (5) \mathbf{A^{(2)}} = \mathbf{L^{(1)}}\mathbf{A^{(1)}} = \left[ \begin{matrix} a_{11}^{(1)} & a_{12}^{(1)} & \cdots & a_{1n}^{(1)} \\ 0 & a_{22}^{(2)} & \cdots & a_{2n}^{(2)} \\ \vdots & \vdots & & \vdots \\ 0 & a_{n2}^{(2)} & \cdots & a_{nn}^{(2)} \end{matrix} \right]. \tag{5} A(2)=L(1)A(1)=a11(1)00a12(1)a22(2)an2(2)a1n(1)a2n(2)ann(2).(5)
    從上面過程能夠看出來, A ( 1 ) = A \mathbf{A^{(1)}}=\mathbf{A} A(1)=A的第1列除主元素 a 11 ( 1 ) a_{11}^{(1)} a11(1)外,其他元素所有被化爲了零,上面公式 ( 4 ) (4) (4)被稱爲消元矩陣
  3. 同理,若是矩陣 A ( 2 ) \mathbf{A^{(2)}} A(2)的主元素 a 22 ( 2 ) ≠ 0 a_{22}^{(2)} \neq 0 a22(2)=0,那麼從第3行到第n行能夠減去 a i 2 ( 2 ) / a 22 ( 2 ) a_{i2}^{(2)} / a_{22}^{(2)} ai2(2)/a22(2)其中 i = 3 , 4 , ⋯   , n i=3,4,\cdots,n i=3,4,,n,這樣操做的目的是把 A ( 2 ) \mathbf{A^{(2)}} A(2)第2列上從第3個到第n個元素所有變爲0。可得消元矩陣爲
    L ( 2 ) = [ 1 1 − l 32 1 ⋮ ⋱ − l n 2 1 ] = [ 1 1 − a 32 ( 2 ) a 22 ( 2 ) 1 ⋮ ⋱ − a n 2 ( 2 ) a 22 ( 2 ) 1 ] . (6) \begin{aligned} \mathbf{L^{(2)}} = \left[ \begin{matrix} 1 \\ & 1 \\ & -l_{32} & 1 \\ & \vdots & & \ddots \\ & -l_{n2} & & & 1 \end{matrix} \right] = \left[ \begin{matrix} 1 \\ & 1 \\ & -\frac{a_{32}^{(2)}}{a_{22}^{(2)}} & 1 \\ & \vdots & & \ddots \\ & -\frac{a_{n2}^{(2)}}{a_{22}^{(2)}} & & & 1 \end{matrix} \right] \end{aligned} . \tag{6} L(2)=11l32ln211=11a22(2)a32(2)a22(2)an2(2)11.(6)
    其中
    l i 2 = a i 2 ( 2 ) / a 22 ( 2 ) , i = 3 , 4 , ⋯   , n , l_{i2} = a_{i2}^{(2)} / a_{22}^{(2)}, \qquad i=3,4,\cdots,n, li2=ai2(2)/a22(2),i=3,4,,n,
    因此
    A ( 3 ) = L ( 2 ) A ( 2 ) = [ a 11 ( 1 ) a 12 ( 1 ) a 13 ( 1 ) ⋯ a 1 n ( 1 ) a 22 ( 2 ) a 23 ( 2 ) ⋯ a 2 n ( 2 ) a 33 ( 3 ) ⋯ a 3 n ( 3 ) ⋮ ⋮ a n 3 ( 3 ) ⋯ a n n ( 3 ) ] . (7) \mathbf{A^{(3)}} = \mathbf{L^{(2)}}\mathbf{A^{(2)}} = \left[ \begin{matrix} a_{11}^{(1)} & a_{12}^{(1)} & a_{13}^{(1)} & \cdots & a_{1n}^{(1)} \\ & a_{22}^{(2)} & a_{23}^{(2)} & \cdots & a_{2n}^{(2)} \\ & & a_{33}^{(3)} & \cdots & a_{3n}^{(3)} \\ & & \vdots & & \vdots \\ & & a_{n3}^{(3)} & \cdots & a_{nn}^{(3)} \end{matrix} \right]. \tag{7} A(3)=L(2)A(2)=a11(1)a12(1)a22(2)a13(1)a23(2)a33(3)an3(3)a1n(1)a2n(2)a3n(3)ann(3).(7)
  4. 若是相似的過程操做 n − 1 n-1 n1次後,就能夠將原來的矩陣 A \mathbf{A} A轉換成上三角矩陣
    A ( n ) = L ( n − 1 ) ⋯ L ( 2 ) L ( 1 ) A ( 1 ) = [ a 11 ( 1 ) a 12 ( 1 ) ⋯ a 1 n ( 1 ) a 22 ( 2 ) ⋯ a 2 n ( 2 ) ⋱ ⋮ a n n ( n ) ] . (8) \mathbf{A^{(n)}} = \mathbf{L^{(n-1)}}\cdots\mathbf{L^{(2)}}\mathbf{L^{(1)}}\mathbf{A^{(1)}} = \left[ \begin{matrix} a_{11}^{(1)} & a_{12}^{(1)} & \cdots & a_{1n}^{(1)} \\ & a_{22}^{(2)} & \cdots & a_{2n}^{(2)} \\ & & \ddots & \vdots \\ & & & a_{nn}^{(n)} \end{matrix} \right]. \tag{8} A(n)=L(n1)L(2)L(1)A(1)=a11(1)a12(1)a22(2)a1n(1)a2n(2)ann(n).(8)
    上面就是高斯消元過程。

高斯消元條件判斷

條件說明

個上面描述了整個高斯消元的主要過程,在其中 n − 1 n-1 n1的每次消元的過程當中,都須要知足 A ( i ) \mathbf{A^{(i)}} A(i)的主元素,也就是 a 11 ( 1 ) , a 22 ( 2 ) , ⋯   , a n − 1 , n − 1 ( n − 1 ) a_{11}^{(1)},a_{22}^{(2)},\cdots,a_{n-1,n-1}^{(n-1)} a11(1),a22(2),,an1,n1(n1)都不能爲零,不然高斯消元過程不能正常完成。
這些主元素都是高斯消元過程當中的中間結果,須要提早判斷是否知足高斯消元的條件才能決定是否執行高斯消元操做,而不是執行過程當中才發現高斯消元過程進行不下去了。
首先定義 n n n階矩陣 A \mathbf{A} A的前 n − 1 n-1 n1個順序主子式(第 i i i個順序主子式也就是原矩陣的左上角 i i i階方陣的行列式)
Δ 1 = a 11 , Δ 2 = ∣ a 11 a 12 a 21 a 22 ∣ , ⋮ Δ n − 1 = ∣ a 11 ⋯ a 12 ⋮ ⋮ a n − 1 , 1 ⋯ a n − 1 , n − 1 ∣ . (9) \begin{aligned} \Delta_1 & = a_{11}, \\ \Delta_2 & = \begin{vmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{vmatrix}, \\ \vdots \\ \Delta_{n-1} & = \begin{vmatrix} a_{11} & \cdots & a_{12} \\ \vdots & & \vdots \\ a_{n-1,1} & \cdots & a_{n-1,n-1} \end{vmatrix}. \end{aligned} \tag{9} Δ1Δ2Δn1=a11,=a11a21a12a22,=a11an1,1a12an1,n1.(9)
基於上面的定義,能夠獲得一個結論能說明在矩陣知足什麼條件下才能正確的完成整個高斯消元過程(在不進行行變換的基礎上)。
定理一
Δ 1 , Δ 2 , ⋯   , Δ n − 1 \Delta_1,\Delta_2,\cdots,\Delta_{n-1} Δ1,Δ2,,Δn1都不爲零時,則 a k k ( k ) ≠ 0 ( k − 1 , 2 , ⋯   , n − 1 ) a_{kk}^{(k)} \not = 0(k-1,2,\cdots,n-1) akk(k)=0(k1,2,,n1)
定理二
高斯消元過程可以進行到底的充分必要條件是 A \mathbf{A} A的前 n − 1 n-1 n1個順序主子式都不爲零,即 Δ k ≠ 0 ( k = 1 , 2 , ⋯   , n − 1 ) \Delta_k \not = 0(k=1,2,\cdots,n-1) Δk=0(k=1,2,,n1).net

上面的定理表示若是要對一個矩陣進行高斯消元,經過計算原始矩陣的前 n − 1 n-1 n1個順序主子式就能夠判斷是否該矩陣完成整個高斯消元過程。xml

證實

這一步證實上面的 Δ 1 , Δ 2 , ⋯   , Δ n − 1 \Delta_1,\Delta_2,\cdots,\Delta_{n-1} Δ1,Δ2,,Δn1都不爲零能夠推導出 a k k ( k ) ≠ 0 ( k − 1 , 2 , ⋯   , n − 1 ) a_{kk}^{(k)} \not = 0(k-1,2,\cdots,n-1) akk(k)=0(k1,2,,n1)的結論。
這裏用數學概括法來證實。htm

  1. Δ 1 = a 11 = a 11 ( 1 ) \Delta_1=a_{11}=a_{11}^{(1)} Δ1=a11=a11(1),顯然當 Δ 1 ≠ 0 \Delta_1 \not = 0 Δ1=0 a 11 ( 1 ) ≠ 0 a_{11}^{(1)} \not = 0 a11(1)=0
  2. 而後假設階數爲 k − 1 k-1 k1時成立,由概括法假設知 a i i ( i ) ≠ 0 ( i = 1 , 2 , ⋯   , k − 1 ) a_{ii}^{(i)} \not = 0(i=1,2,\cdots,k-1) aii(i)=0(i=1,2,,k1),根據前面的消元過程
    A ( k ) = L ( k − 1 ) ⋯ L ( 2 ) L ( 1 ) A = [ a 11 ( 1 ) a 12 ( 1 ) ⋯ ⋯ a 1 n ( 1 ) a 22 ( 2 ) ⋯ ⋯ a 2 n ( 2 ) ⋱ ⋮ ⋮ a k k ( k ) ⋯ a k n ( k ) ⋮ ⋮ a n 3 ( k ) ⋯ a n n ( k ) ] . \mathbf{A^{(k)}} = \mathbf{L^{(k-1)}}\cdots\mathbf{L^{(2)}}\mathbf{L^{(1)}}\mathbf{A} = \left[ \begin{matrix} a_{11}^{(1)} & a_{12}^{(1)} & \cdots & \cdots & a_{1n}^{(1)} \\ & a_{22}^{(2)} & \cdots & \cdots & a_{2n}^{(2)} \\ & \ddots & \vdots& & \vdots \\ & & a_{kk}^{(k)} & \cdots & a_{kn}^{(k)} \\ & & \vdots & & \vdots \\ & & a_{n3}^{(k)} & \cdots & a_{nn}^{(k)} \end{matrix} \right]. A(k)=L(k1)L(2)L(1)A=a11(1)a12(1)a22(2)akk(k)an3(k)a1n(1)a2n(2)akn(k)ann(k).
    在進行高斯消元過程當中進行的倍加初等變換不改變矩陣 A \mathbf{A} A的行列式的值,因此從上面 A ( k ) \mathbf{A^{(k)}} A(k)的形狀可知,矩陣 A \mathbf{A} A的前 n − 1 n-1 n1個順序主子式知足下面關係
    Δ 1 = a 11 = a 11 ( 1 ) , Δ 2 = ∣ a 11 a 12 a 21 a 22 ∣ = ∣ a 11 ( 1 ) a 12 ( 1 ) 0 a 22 ( 2 ) ∣ = a 11 ( 1 ) a 22 ( 2 ) , ⋮ Δ k = ∣ a 11 ⋯ a 12 ⋮ ⋮ a k , 1 ⋯ a k , k ∣ = ∣ a 11 ( 1 ) a 12 ( 1 ) ⋯ a 1 k ( 1 ) a 22 ( 2 ) ⋯ a 2 k ( 2 ) ⋱ ⋮ a k k ( k ) ∣ = a 11 ( 1 ) a 22 ( 2 ) ⋯ a k k ( k ) . (10) \begin{aligned} \Delta_1 & = a_{11} = a_{11}^{(1)}, \\ \Delta_2 & = \begin{vmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{vmatrix} = \begin{vmatrix} a_{11}^{(1)} & a_{12}^{(1)} \\ 0 & a_{22}^{(2)} \end{vmatrix} = a_{11}^{(1)}a_{22}^{(2)}, \\ \vdots \\ \Delta_{k} & = \begin{vmatrix} a_{11} & \cdots & a_{12} \\ \vdots & & \vdots \\ a_{k,1} & \cdots & a_{k,k} \end{vmatrix} =\begin{vmatrix} a_{11}^{(1)} & a_{12}^{(1)} & \cdots & a_{1k}^{(1)} \\ & a_{22}^{(2)} & \cdots & a_{2k}^{(2)} \\ & & \ddots & \vdots \\ & & & a_{kk}^{(k)} \end{vmatrix} =a_{11}^{(1)}a_{22}^{(2)} \cdots a_{kk}^{(k)} . \end{aligned} \tag{10} Δ1Δ2Δk=a11=a11(1),=a11a21a12a22=a11(1)0a12(1)a22(2)=a11(1)a22(2),=a11ak,1a12ak,k=a11(1)a12(1)a22(2)a1k(1)a2k(2)akk(k)=a11(1)a22(2)akk(k).(10)
    根據假設已知 Δ i ≠ 0 \Delta_i \not = 0 Δi=0同時 a i i ( i ) ≠ 0 ( i = 1 , 2 , ⋯   , k − 1 ) a_{ii}^{(i)} \not = 0(i=1,2,\cdots,k-1) aii(i)=0(i=1,2,,k1),同時又有公式 ( 10 ) (10) (10)可知 a k k ( k ) ≠ 0 a_{kk}^{(k)} \not = 0 akk(k)=0,則對 k k k階矩陣也成立。
    證實完成!!!

示例

三階矩陣
A = [ 1 2 3 4 10 15 6 18 30 ] . \mathbf{A} = \left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 10 & 15 \\ 6 & 18 & 30 \end{matrix} \right]. A=1462101831530.
根據上面的過程可知
{ Δ 1 = 1 Δ 2 = 2 \begin{cases} \Delta_1 = 1 \\ \Delta_2 = 2 \end{cases} { Δ1=1Δ2=2
知足上面的定理二,該矩陣的高斯消元過程可以進行到底。
根據高斯消元過程得
{ A ( 1 ) = A = [ 1 2 3 4 10 15 6 18 30 ] , A ( 2 ) = [ 1 2 3 2 3 6 12 ] , A ( 3 ) = [ 1 2 3 2 3 3 ] . \begin{aligned} \begin{cases} \mathbf{A^{(1)}} = \mathbf{A} & = \left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 10 & 15 \\ 6 & 18 & 30 \end{matrix} \right], \\ \\ \mathbf{A^{(2)}} & = \left[ \begin{matrix} 1 & 2 & 3 \\ & 2 & 3 \\ & 6 & 12 \end{matrix} \right], \\ \\ \mathbf{A^{(3)}} & = \left[ \begin{matrix} 1 & 2 & 3 \\ & 2 & 3 \\ & & 3 \end{matrix} \right]. \end{cases} \end{aligned} A(1)=AA(2)A(3)=1462101831530,=12263312,=122333.blog

引用

【1】 矩陣論(第二版)教程

本文同步分享在 博客「無比機智的永哥」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索