4.3 高斯消元法
当可逆矩阵 P − 1 P^{-1} P−1 取单位下三角矩阵 L L L 时,即矩阵对角线元素均为 1 1 1 ,得矩阵的 L U LU LU 分解。
重要性质 矩阵 L U LU LU 分解 矩阵 A A A 分解为单位下三角矩阵和上三角矩阵的乘积 A = L U A=LU A=LU。
此时方程 A x = b A\mathbf{x}=\mathbf{b} Ax=b 变为
L
(
U
x
)
=
b
y
=
U
x
L
y
=
b
L(U\mathbf{x})=\mathbf{b}\\ \mathbf{y}=U\mathbf{x} \\ L\mathbf{y}=\mathbf{b}
L(Ux)=by=UxLy=b
即先解单位下三角方程
L
y
=
b
L\mathbf{y}=\mathbf{b}
Ly=b 得到
y
\mathbf{y}
y ,再解上三角方程
y
=
U
x
\mathbf{y}=U\mathbf{x}
y=Ux 得到
x
\mathbf{x}
x ,原方程等价于解两个简单的三角方程。公式表示为
x
=
U
−
1
L
−
1
b
\mathbf{x} = U^{-1}L^{-1}\mathbf{b}
x=U−1L−1b ,由于三角矩阵很容易计算逆矩阵,故只要得到矩阵的
L
U
LU
LU 分解,就可快速求得解。三角方程解存在且唯一的条件是三角阵对角线元素均不等于
0
0
0 ,则矩阵
A
A
A 可逆条件是矩阵
U
U
U 的对角线元素均不等于
0
0
0 ,且
A
−
1
=
U
−
1
L
−
1
A^{-1}=U^{-1}L^{-1}
A−1=U−1L−1 。
如何得到矩阵的 L U LU LU 分解呢?根据矩阵乘法第 4 4 4 种计算方式,采用待定系数法可计算两个三角矩阵的元素。先计算上三角矩阵第 1 1 1 行元素,然后是单位下三角矩阵第 1 1 1 列元素;接着计算上三角矩阵第 2 2 2 行元素,然后是单位下三角矩阵第 2 2 2 列元素;依次类推即可。这个计算方法是计算机友好的,方便程序实现,效率也更高,但不是人类友好的,不直观。本书不打算推导该公式,读者可自行推导或查找网络资料。
我们介绍更直观的高斯消元法进行矩阵
L
U
LU
LU 分解,以
3
3
3 元一次方程为例介绍。例如方程为
2
x
+
4
y
−
2
z
=
2
⋯
1
4
x
+
9
y
−
3
z
=
8
⋯
2
−
2
x
−
3
y
+
7
z
=
10
⋯
3
2x + 4y - 2z = 2 \cdots 1 \\ 4x + 9y - 3z = 8 \cdots 2 \\ -2x - 3y + 7z = 10 \cdots 3
2x+4y−2z=2⋯14x+9y−3z=8⋯2−2x−3y+7z=10⋯3
A = [ 2 4 − 2 4 9 − 3 − 2 − 3 7 ] b = [ 2 8 10 ] A=\left[ \begin{matrix} 2 & 4 & -2\\ 4 & 9 & -3\\ -2 & -3 & 7 \end{matrix} \right] \mathbf{b}=\left[ \begin{matrix} 2 \\ 8 \\ 10 \end{matrix} \right] A=⎣⎡24−249−3−2−37⎦⎤b=⎣⎡2810⎦⎤
我们目的是解不变的前提下,矩阵
A
A
A 变换成上三角阵。理论基础是:任意方程乘以不为零的数,加到任意方程后,解不变。通过合理选择数值,每次使矩阵左下角某个元素变为
0
0
0 。具体为,方程
1
1
1 乘以
−
2
-2
−2 加到方程
2
2
2 ,方程
2
2
2 变为 $(2*(-2)+4)x + (4*(-2)+9)y + (-2*(-2)+(-3))z = 2*(-2)+8, 0x + y + z = 4 $ 。方程
1
1
1 乘以
1
1
1 加到方程
3
3
3 ,方程
3
3
3 变为 $(2*(1)+(-2))x + (4*(1)+(-3))y + (-2*(1)+7)z = 2*(1)+10, 0x + y + 5z = 12 $ 。方程变为,
2
x
+
4
y
−
2
z
=
2
⋯
1
0
x
+
y
+
z
=
4
⋯
2
0
x
+
y
+
5
z
=
12
⋯
3
2x + 4y - 2z = 2 \cdots 1 \\ 0x + y + z = 4 \cdots 2 \\ 0x + y + 5z = 12 \cdots 3
2x+4y−2z=2⋯10x+y+z=4⋯20x+y+5z=12⋯3
方程系数第一列下面均为
0
0
0 。
方程
2
2
2 乘以
−
1
-1
−1 加到方程
3
3
3 ,方程
3
3
3 变为
(
1
∗
(
−
1
)
+
1
)
y
+
(
1
∗
(
−
)
+
5
z
=
4
∗
(
−
1
)
+
12
,
0
x
+
0
y
+
4
z
=
8
(1*(-1)+1)y + (1*(-)+5z = 4*(-1)+12, 0x + 0y + 4z = 8
(1∗(−1)+1)y+(1∗(−)+5z=4∗(−1)+12,0x+0y+4z=8 。方程变为,
2
x
+
4
y
−
2
z
=
2
⋯
1
0
x
+
y
+
z
=
4
⋯
2
0
x
+
0
y
+
4
z
=
8
⋯
3
2x + 4y - 2z = 2 \cdots 1 \\ 0x + y + z = 4 \cdots 2 \\ 0x + 0y + 4z = 8 \cdots 3
2x+4y−2z=2⋯10x+y+z=4⋯20x+0y+4z=8⋯3
U
=
[
2
4
−
2
0
1
1
0
0
4
]
U=\left[ \begin{matrix} 2 & 4 & -2\\ 0 & 1 & 1\\ 0 & 0 & 4 \end{matrix} \right]
U=⎣⎡200410−214⎦⎤
解为 x = − 1 , y = 2 , z = 2 x=-1,y=2,z=2 x=−1,y=2,z=2 。
上面操作过程中,变量
x
,
y
,
z
x,y,z
x,y,z 实际上并没有参与运算,故为了简洁,可以省略。向量
b
\mathbf{b}
b 和矩阵
A
A
A 列向量进行相同的操作,故可把两者合并为一个矩阵,称为增广矩阵。
定义 增广矩阵 方程
A
x
=
b
A\mathbf{x}=\mathbf{b}
Ax=b 的矩阵
A
A
A 列向量组和向量
b
\mathbf{b}
b 合并成的矩阵
[
A
,
b
]
[A ,b]
[A,b] 。
上面方程的增广矩阵为
[
A
,
b
]
=
[
2
4
−
2
2
4
9
−
3
8
−
2
−
3
7
10
]
[A, b] = \left[ \begin{matrix} 2 & 4 & -2 & 2\\ 4 & 9 & -3 & 8\\ -2 & -3 & 7 & 10 \end{matrix} \right]
[A,b]=⎣⎡24−249−3−2−372810⎦⎤
消元操作可直接在增广矩阵上进行,更简洁方便。
对于 n n n 阶矩阵,第一阶段:第一次操作,方程 1 1 1 乘以 − a 21 / a 11 -a_{21}/a_{11} −a21/a11 ,加到方程 2 2 2 ,使 a 21 a_{21} a21 为 0 0 0 ;第二次操作,方程 1 1 1 乘以 − a 31 / a 11 -a_{31}/a_{11} −a31/a11 ,加到方程 3 3 3 ,使 a 31 a_{31} a31 为 0 0 0 ;依次类推,第 i − 1 i-1 i−1 次操作,方程 1 1 1 乘以 − a i 1 / a 11 -a_{i1}/a_{11} −ai1/a11 ,加到方程 i i i ,使 a i 1 a_{i1} ai1 为 0 0 0 ,直到 n − 1 n-1 n−1 次操作,使矩阵第一列对角线下方均为 0 0 0 。
第二阶段:第一次操作,方程 2 2 2 乘以 − a 32 / a 22 -a_{32}/a_{22} −a32/a22 ,加到方程 3 3 3 ,使 a 32 a_{32} a32 为 0 0 0 ;第二次操作,方程 2 2 2 乘以 − a 42 / a 22 -a_{42}/a_{22} −a42/a22 ,加到方程 4 4 4 ,使 a 42 a_{42} a42 为 0 0 0 ;依次类推,第 i − 2 i-2 i−2 次操作,方程 2 2 2 乘以 − a i 2 / a 22 -a_{i2}/a_{22} −ai2/a22 ,加到方程 i i i ,使 a i 2 a_{i2} ai2 为 0 0 0 ,直到 n − 2 n-2 n−2 次操作,使矩阵第 2 2 2 列对角线下方元素均为 0 0 0 。注意,此时 a i j a_{ij} aij 的值不是原始值,是第一阶段操作后矩阵的值。
以此类推,第 j j j 阶段:第一次操作,方程 j j j 乘以 − a j + 1 , j / a j j -a_{j+1,j}/a_{jj} −aj+1,j/ajj ,加到方程 j + 1 j+1 j+1 ,使 a j + 1 , j a_{j+1,j} aj+1,j 为 0 0 0 ;第二次操作,方程 j j j 乘以 − a j + 2 , j / a j j -a_{j+2,j}/a_{jj} −aj+2,j/ajj ,加到方程 j + 2 j+2 j+2 ,使 a j + 2 , j a_{j+2,j} aj+2,j 为 0 0 0 ;依次类推,直到 n − j n-j n−j 次操作,使矩阵第 j j j 列对角线下方元素均为 0 0 0 。
一直进行到第 n − 1 n-1 n−1 阶段,则矩阵 A A A 变换为上三角阵。