-
LU分解
Gauss消去法,本质上就是对系数矩阵 A A A进行 L U LU LU分解,即将 A A A分解成两个矩阵的乘积
A = L U A=LU A=LU
其中 L L L是单位下三角矩阵, U U U为非奇异上三角矩阵,然后再对两个三角方程进行求解: 假定矩阵A存在 L U LU LU分解,则方程组 A x = b Ax=b Ax=b就转化为求解下面两个三角方程组
{ L y = b U x = y \left\{\begin{matrix} Ly=b\\ Ux=y \end{matrix}\right. {Ly=bUx=y
显然,上式中的两个三角方程组都非常容易求解。
我们知道, 当系数矩阵A非奇异时,方程组 A x = b Ax=b Ax=b总是存在唯一解。但是,并不是每个非奇异矩阵都存在 L U LU LU分解。 -
L U LU LU分解的存在性和唯一性
矩阵 A ∈ R n × n A∈R^{n×n} A∈Rn×n存在 L U LU LU分解(即存在单位下三角矩阵 L L L和非奇异上三角矩阵 U U U使得 A = L U A=LU A=LU)的充要条件是 A A A的所有顺序主子矩阵都非奇异。进一步,若 A A A存在 L U LU LU分解,则分解是唯一的。- 顺序主子矩阵(顺序主子式)
矩阵的顺序主子式(principal minors)是矩阵的特定类型子矩阵,它们可以帮助我们分析矩阵的性质,如正定性和特征值。顺序主子式是通过从矩阵的主对角线上选取连续的行和列,然后构成子矩阵来定义的。这些子矩阵的行数和列数相同,且与原矩阵的行数和列数有关。它们通常用于判断矩阵的性质和分析特征值的范围。
- 顺序主子矩阵(顺序主子式)
-
L U LU LU分解的实现
矩阵的 L U LU LU分解可以通过初等行变换来实现,给定矩阵
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ] ∈ R n × n A = \begin{bmatrix} a_{11}& a_{12} & \cdots & a_{1n} \\ a_{21}& a_{22} & \cdots & a_{2n} \\ \vdots& \vdots & \ddots & \vdots \\ a_{n1}& a_{n2} & \cdots & a_{nn} \\ \end{bmatrix} ∈ \mathbb{R}^{n\times n} A= a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮ann ∈Rn×n- 第一步:假定
a
11
≠
0
a_{11} \neq 0
a11=0,构造矩阵
L 1 = [ 1 0 0 ⋯ 0 l 21 1 0 ⋯ 0 l 31 0 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ l n 1 0 0 ⋯ 1 ] ,其中 l i 1 = a i 1 a 11 , i = 2 , 3 , ⋯ , n . L_{1} = \begin{bmatrix} 1& 0 & 0 & \cdots & 0 \\ l_{21}& 1 & 0 & \cdots & 0 \\ l_{31}& 0 & 1 & \cdots & 0 \\ \vdots& \vdots & \vdots & \ddots &\vdots \\ l_{n1}& 0 & 0 & \cdots & 1 \\ \end{bmatrix} ,其中 l_{i1} = \frac{a_{i1}}{a_{11}},i=2,3,\cdots ,n. L1= 1l21l31⋮ln1010⋮0001⋮0⋯⋯⋯⋱⋯000⋮1 ,其中li1=a11ai1,i=2,3,⋯,n.
易知 L 1 L_{1} L1的逆为
L 1 − 1 = [ 1 0 0 ⋯ 0 − l 21 1 0 ⋯ 0 − l 31 0 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ − l n 1 0 0 ⋯ 1 ] L_{1}^{-1} = \begin{bmatrix} 1& 0 & 0 & \cdots & 0 \\ -l_{21}& 1 & 0 & \cdots & 0 \\ -l_{31}& 0 & 1 & \cdots & 0 \\ \vdots& \vdots & \vdots & \ddots &\vdots \\ -l_{n1}& 0 & 0 & \cdots & 1 \\ \end{bmatrix} L1−1= 1−l21−l31⋮−ln1010⋮0001⋮0⋯⋯⋯⋱⋯000⋮1
用 L 1 − 1 L^{−1}_{1} L1−1左乘 A A A,并将所得到的矩阵记为 A ( 1 ) A^{(1)} A(1),则
A ( 1 ) = L 1 − 1 A = [ a 11 a 12 ⋯ a 1 n 0 a 22 ( 1 ) ⋯ a 2 n ( 1 ) ⋮ ⋮ ⋱ ⋮ 0 a n 2 ( 1 ) ⋯ a n n ( 1 ) ] A^{(1)} = L^{-1}_{1}A = \begin{bmatrix} a_{11}& a_{12} & \cdots & a_{1n} \\ 0& a_{22}^{(1)} & \cdots & a_{2n}^{(1)} \\ \vdots& \vdots & \ddots & \vdots \\ 0& a_{n2}^{(1)} & \cdots & a_{nn}^{(1)} \\ \end{bmatrix} A(1)=L1−1A= a110⋮0a12a22(1)⋮an2(1)⋯⋯⋱⋯a1na2n(1)⋮ann(1)
即左乘 L 1 − 1 L^{−1}_{1} L1−1后, A A A的第一列中除第一个元素外其它都变为0. - 第二步: 类似地, 我们可以将上面的操作作用在
A
(
1
)
A^{(1)}
A(1)的子矩阵
A
(
1
)
(
2
:
n
,
2
:
n
)
A^{(1)}(2:n,2:n)
A(1)(2:n,2:n)上,将其第一列除第一个元素外都变为0。也就是说,假定
a
22
(
1
)
≠
0
a^{(1)}_{22} \neq 0
a22(1)=0 构造矩阵
L 2 = [ 1 0 0 ⋯ 0 0 1 0 ⋯ 0 0 l 32 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 l n 2 0 ⋯ 1 ] ,其中 l i 2 = a i 2 ( 2 ) a 22 ( 2 ) , i = 3 , 4 , ⋯ , n . L_{2} = \begin{bmatrix} 1& 0 & 0 & \cdots & 0 \\ 0& 1 & 0 & \cdots & 0 \\ 0& l_{32} & 1 & \cdots & 0 \\ \vdots& \vdots & \vdots & \ddots &\vdots \\ 0& l_{n2} & 0 & \cdots & 1 \\ \end{bmatrix} ,其中 l_{i2} = \frac{a_{i2}^{(2)}}{a_{22}^{(2)}},i=3,4,\cdots ,n. L2= 100⋮001l32⋮ln2001⋮0⋯⋯⋯⋱⋯000⋮1 ,其中li2=a22(2)ai2(2),i=3,4,⋯,n.
用 L 2 − 1 L_{2}^{-1} L2−1左乘 A ( 1 ) A^{(1)} A(1),并将所得到的矩阵记为 A ( 2 ) A^{(2)} A(2),则
A ( 2 ) = L 2 − 1 A ( 1 ) = [ a 11 a 12 a 13 ⋯ a 1 n 0 a 22 ( 1 ) a 23 ( 1 ) ⋯ a 2 n ( 1 ) 0 0 a 33 ( 2 ) ⋯ a n n ( 2 ) ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 a n 3 2 ⋯ a n n ( 2 ) ] A^{(2)} = L^{-1}_{2}A^{(1)} = \begin{bmatrix} a_{11}& a_{12} & a_{13} & \cdots & a_{1n} \\ 0& a_{22}^{(1)} & a_{23}^{(1)} &\cdots & a_{2n}^{(1)} \\ 0& 0 & a_{33}^{(2)} &\cdots & a_{nn}^{(2)} \\ \vdots& \vdots & \vdots & \ddots & \vdots \\ 0& 0 & a_{n3}^{2} & \cdots & a_{nn}^{(2)}\\ \end{bmatrix} A(2)=L2−1A(1)= a1100⋮0a12a22(1)0⋮0a13a23(1)a33(2)⋮an32⋯⋯⋯⋱⋯a1na2n(1)ann(2)⋮ann(2)
依此类推,假定 a k k ( k − 1 ) ≠ 0 ( k = 3 , 4 , ⋯ , n − 1 ) a^{(k−1)}_{kk}\neq 0\left(k=3,4,\cdots ,n−1\right) akk(k−1)=0(k=3,4,⋯,n−1),则我们可以构造一系列的矩阵 L 3 , L 4 , L n − 1 L_{3},L_{4},L_{n−1} L3,L4,Ln−1,使得
L n − 1 − 1 ⋯ L 2 − 1 L 1 − 1 A = [ a 11 a 12 a 13 ⋯ a 1 n 0 a 22 ( 1 ) a 23 ( 1 ) ⋯ a 2 n ( 1 ) 0 0 a 33 ( 2 ) ⋯ a 3 n ( 2 ) ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ a n n ( n − 1 ) ] L_{n-1}^{-1}\cdots L_2^{-1}L_1^{-1}A = \begin{bmatrix} a_{11}&a_{12}&a_{13}&\cdots&a_{1n}\\ 0 & a_{22}^{(1)} & a_{23}^{(1)} & \cdots & a_{2n}^{(1)}\\ 0 & 0 & a_{33}^{(2)} & \cdots & a_{3n}^{(2)}\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & a_{nn}^{(n-1)} \\ \end{bmatrix} Ln−1−1⋯L2−1L1−1A= a1100⋮0a12a22(1)0⋮0a13a23(1)a33(2)⋮0⋯⋯⋯⋱⋯a1na2n(1)a3n(2)⋮ann(n−1)
为一个上三角矩阵。我们将这个上三角矩阵记为 U U U,并记
L ≜ L 1 L 2 ⋯ L n − 1 = [ 1 0 0 ⋯ 0 l 21 1 0 ⋯ 0 l 31 l 32 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ l n 1 l n 2 l n 3 ⋯ 1 ] , L\triangleq L_1L_2\cdots L_{n-1}= \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 \\ l_{21} & 1 & 0 & \cdots & 0 \\ l_{31} & l_{32} & 1 & \cdots & 0\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ l_{n1}&l_{n2}&l_{n3}&\cdots&1\\ \end{bmatrix}, L≜L1L2⋯Ln−1= 1l21l31⋮ln101l32⋮ln2001⋮ln3⋯⋯⋯⋱⋯000⋮1 ,
则可得
A = L U , A = LU, A=LU,
这就是 A A A的 L U LU LU分解。
- 第一步:假定
a
11
≠
0
a_{11} \neq 0
a11=0,构造矩阵
-
L U LU LU算法
LU分解伪代码
Set L = I, U = 0 % 将L设为单位矩阵,U设为零矩阵 for k = 1:n−1 for j = k:n u(k.j) = a(k,j) % 更新U的第k行 end for i = k+1:n l(i,k) = a(i,k)/a(k,k) % 计算 lik for j = k+1:n a(i,j) = a(i,j)−l(i,k)*u(k,j) % 更新A(i,k+1:n) end end end
-
Gauss消去法代码实现
回代求解Ly=b和Ux=y
y(1) = b(1)/l(1,1) % 向前回代求解Ly=b for i = 2:n for j = 1:i−1 do b(i) = b(i) − l(i,j)*y(j) end y(i) = b(i)/l(i,i) end x(n) = y(n)/u(n,n) % 向后回代求解Ux=y for i = n−1:−1:1 for j = n:−1:i+1 y(i) = y(i) − u(i,j)*x(j) end x(i) = y(i)/u(i,i) end
【数值分析——线性方程组直接方法】LU分解与Gauss消去法
于 2023-11-28 15:51:29 首次发布