〇、Gauss消去法
对于
n
n
n元线性方程组
A
x
=
b
(0)
\bm{A}\bm{x}=\bm{b}\tag{0}
Ax=b(0)
其中, A = ( a i j ) n × n \bm{A}=(a_{ij})_{n \times n} A=(aij)n×n, x = ( ξ 1 , ξ 2 , ⋯ , ξ n ) T \bm{x}=(\xi_1,\xi_2,\cdots,\xi_n)^{\rm T} x=(ξ1,ξ2,⋯,ξn)T, b = ( b 1 , b 2 , ⋯ , b n ) T \bm{b}=(b_1,b_2,\cdots,b_n)^{\rm T} b=(b1,b2,⋯,bn)T。Gauss消去法的基本思想是化系数矩阵 A \textbf{\textit{A}} A为上三角矩阵,或化增广矩阵 [ A b ] \left[\begin{array}{c|c}\bm{A}&\bm{b}\end{array}\right] [Ab]为上阶梯形矩阵以求其解,这个过程就叫Gauss消元。
Gauss消元过程能够进行到底的条件是当且仅当
A
\bm{A}
A的各阶顺序主子式都不为零,即:
Δ
r
≠
0
(
r
=
1
,
2
,
⋯
,
n
−
1
)
\color{#F0F}\Delta_r\neq0\quad(r=1,2,\cdots,n-1)
Δr=0(r=1,2,⋯,n−1)
一、矩阵的三角分解
三角分解 { A = L D U LDU分解 A = L ( D U ) = L U ^ Doolittle分解 A = ( L D ) U = L ^ U Crout分解 三角分解 \begin{cases} A=LDU& \text {LDU分解} \\ A=L(DU)=L\hat U & \text {Doolittle分解}\\A=(LD)U=\hat LU& \text {Crout分解} \end{cases} 三角分解⎩ ⎨ ⎧A=LDUA=L(DU)=LU^A=(LD)U=L^ULDU分解Doolittle分解Crout分解
三角分解又称作LU分解或LR分解。在上式中, L L L是单位下三角矩阵, D D D是对角矩阵, U U U是单位上三角矩阵。
分解过程:
A
=
A
(
0
)
=
L
1
A
(
1
)
=
L
1
L
2
A
(
2
)
=
⋯
=
L
1
L
2
⋯
L
n
−
1
A
(
n
−
1
)
=
L
A
(
n
−
1
)
(1)
\color{#F00}A=A^{(0)}=L_1A^{(1)}=L_1L_2A^{(2)}=\cdots=L_1L_2\cdots L_{n-1}A^{(n-1)}=LA^{(n-1)} \tag{1}
A=A(0)=L1A(1)=L1L2A(2)=⋯=L1L2⋯Ln−1A(n−1)=LA(n−1)(1)
L 1 = [ 1 c 21 1 ⋮ ⋱ c n 1 1 ] L_1=\begin{bmatrix} 1 \\c_{21} & 1 \\ \vdots & & \ddots \\c_{n1} & & & 1 \end{bmatrix} L1= 1c21⋮cn11⋱1 , L 2 = [ 1 1 c 32 1 ⋮ ⋱ c n 2 1 ] L_2=\begin{bmatrix} 1 \\ & 1 \\ & c_{32} & 1 \\ & \vdots & & \ddots\\ & c_{n2} & & & 1\end{bmatrix} L2= 11c32⋮cn21⋱1 , ⋯ \cdots ⋯, L r = [ 1 ⋱ 1 c r + 1 , r 1 ⋮ ⋱ c n r 1 ] L_r=\begin{bmatrix} 1 \\ & \ddots \\ & & 1 \\ & & c_{r+1,r} & 1\\ & & \vdots & &\ddots \\ & & c_{nr} & & & 1\end{bmatrix} Lr= 1⋱1cr+1,r⋮cnr1⋱1 , L n − 1 = [ 1 1 ⋱ 1 c n , n − 1 1 ] L_{n-1}=\begin{bmatrix} 1 \\ & 1 \\ & & \ddots \\ & & & 1\\ & & & c_{n,n-1} & 1\end{bmatrix} Ln−1= 11⋱1cn,n−11 为Frobenius矩阵,其中空白处全为 0 \,0\, 0, c i r = a i r ( r − 1 ) a r r ( r − 1 ) , ( r = 1 , 2 , ⋯ , n − 1 ) , ( i = r + 1 , r + 2 , ⋯ , n ) \color{#F0F}c_{ir}=\cfrac{a_{ir}^{(r-1)}}{a_{rr}^{(r-1)}},(r=1,2,\cdots,n-1),(i=r+1,r+2,\cdots,n) cir=arr(r−1)air(r−1),(r=1,2,⋯,n−1),(i=r+1,r+2,⋯,n), L r − 1 = [ 1 ⋱ 1 − c r + 1 , r 1 ⋮ ⋱ − c n r 1 ] L_r^{-1}=\begin{bmatrix} 1 \\ & \ddots \\ & & 1 \\ & & -c_{r+1,r} & 1\\ & & \vdots & &\ddots \\ & & -c_{nr} & & & 1\end{bmatrix} Lr−1= 1⋱1−cr+1,r⋮−cnr1⋱1 。
L = L 1 L 2 ⋯ L ( n − 1 ) = [ 1 c 21 1 ⋮ ⋮ ⋱ c n − 1 , 1 c n − 1 , 2 ⋯ 1 c n 1 c n 2 ⋯ c n , n − 1 1 ] L=L_1L_2\cdots L_{(n-1)}=\begin{bmatrix} 1 \\[2ex] c_{21} & 1 \\[2ex] \vdots & \vdots & \ddots \\[2ex] c_{n-1,1} & c_{n-1,2} & \cdots & 1 \\[2ex] c_{n1} & c_{n2} & \cdots & c_{n,n-1} & 1\end{bmatrix} L=L1L2⋯L(n−1)= 1c21⋮cn−1,1cn11⋮cn−1,2cn2⋱⋯⋯1cn,n−11 是一个单位下三角矩阵, A ( n − 1 ) = L n − 1 − 1 ⋯ L 2 − 1 L 1 − 1 A ( 0 ) = L − 1 A A^{(n-1)}=L_{n-1}^{-1}\cdots L_2^{-1}L_1^{-1}A^{(0)}=L^{-1}A A(n−1)=Ln−1−1⋯L2−1L1−1A(0)=L−1A是一个上三角矩阵,可以分解成一个对角矩阵( D D D)和一个单位上三角矩阵( U U U)。
二、矩阵的Cholesky分解
当
A
A
A为实对称正定矩阵时,有
A
=
L
D
U
=
A
T
=
(
L
D
U
)
T
=
U
T
D
L
T
,
D
=
d
i
a
g
(
d
1
,
d
2
,
⋯
,
d
n
)
A=LDU=A^{\text T}=(LDU)^{\rm T}=U^{\rm T}DL^{\rm T},\quad D={\rm{diag}}(d_1,d_2,\cdots,d_n)
A=LDU=AT=(LDU)T=UTDLT,D=diag(d1,d2,⋯,dn)
即有:
L
=
U
T
L=U^{\rm T}
L=UT,
U
=
L
T
U=L^{\rm T}
U=LT,令
D
~
=
d
i
a
g
(
d
1
,
d
2
,
⋯
,
d
n
)
\tilde D={\rm{diag}}(\sqrt{d_1},\sqrt{d_2},\cdots,\sqrt{d_n})
D~=diag(d1,d2,⋯,dn),则有:
A
=
L
D
L
T
=
L
D
~
2
L
T
=
(
L
D
~
)
(
D
~
L
T
)
=
(
L
D
~
)
(
L
D
~
)
T
=
G
G
T
(2)
\color{#F00}A=LDL^{\rm T}=L\tilde D^2L^{\rm T}=(L\tilde D)(\tilde DL^{\rm T})=(L\tilde D)(L\tilde D)^{\rm T}=GG^{\rm T}\tag{2}
A=LDLT=LD~2LT=(LD~)(D~LT)=(LD~)(LD~)T=GGT(2)
其中, G = L D ~ G=L\tilde D G=LD~为下三角矩阵。上式即为矩阵的Cholesky分解,又称平方根分解或对称三角分解。
Cholesky分解过程中,可以根据以下递推公式计算
G
G
G矩阵中每个元素的值:
g
i
j
=
{
(
a
i
i
−
∑
k
=
1
i
−
1
g
i
k
2
)
1
/
2
(
i
=
j
)
1
g
j
j
(
a
i
j
−
∑
k
=
1
j
−
1
g
i
k
g
j
k
)
(
i
>
j
)
0
(
i
<
j
)
\color{#F0F}g_{ij}=\begin{cases} (a_{ii}-\sum\limits_{k=1}^{i-1}g_{ik}^2)^{1/2} & (i=j) \\[2ex] \cfrac{1}{g_{jj}}(a_{ij}-\sum\limits_{k=1}^{j-1}g_{ik}g_{jk}) &(i>j) \\[2ex] \quad0 & (i<j) \end{cases}
gij=⎩
⎨
⎧(aii−k=1∑i−1gik2)1/2gjj1(aij−k=1∑j−1gikgjk)0(i=j)(i>j)(i<j)
当然也可以先对矩阵 A A A做LDU分解,然后取 G = L D ~ G=L\tilde D G=LD~。