上回我们说到解线性方程 A x = b Ax=b Ax=b,需要先对系数矩阵A不断乘初等变换矩阵直到出现上三角矩阵来达到消元的目的,我们以三阶矩阵为例,在不交换行的情况下,消元过程可表示为
E 32 E 31 E 21 A x = b ⇒ U x = b \color{red}E_{32}E_{31}E_{21}Ax=b⇒Ux=b E32E31E21Ax=b⇒Ux=b
然后通过回代的方式就可以解出x的所有值。来看一个具体的例子
[ 1 1 2 2 3 6 3 8 9 ] [ x y z ] = [ 1 2 3 ] \begin{bmatrix} 1 & 1 & 2\\ 2 & 3 & 6 \\ 3 & 8 & 9 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix}= \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} ⎣⎡123138269⎦⎤⎣⎡xyz⎦⎤=⎣⎡123⎦⎤
先给系数阵消元
[ 1 0 0 0 1 0 0 − 5 1 ] [ 1 0 0 − 2 1 0 − 3 0 1 ] [ 1 1 2 2 3 6 3 8 9 ] = [ 1 1 2 0 1 2 0 0 − 7 ] \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & -5 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ -2 & 1 & 0 \\ -3 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 1 & 2\\ 2 & 3 & 6 \\ 3 & 8 & 9 \end{bmatrix}=\begin{bmatrix} 1 & 1 & 2\\ 0 & 1 & 2 \\ 0 & 0 & -7 \end{bmatrix} ⎣⎡10001−5001⎦⎤⎣⎡1−2−3010001⎦⎤⎣⎡123138269⎦⎤=⎣⎡10011022−7⎦⎤
而如果我想将两次变换变为一次,只要将两个消元矩阵相乘即可
[ 1 0 0 0 1 0 0 − 5 1 ] [ 1 0 0 − 2 1 0 − 3 0 1 ] = [ 1 0 0 − 2 1 0 7 − 5 1 ] \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & -5 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ -2 & 1 & 0 \\ -3 & 0 & 1 \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0\\ -2 & 1 & 0 \\ 7 & -5 & 1 \end{bmatrix} ⎣⎡10001−5001⎦⎤⎣⎡1−2−3010001⎦⎤=⎣⎡1−2701−5001⎦⎤
计算时我们可以发现,计算结果的 [7 -5 1] 是由
− 5 ∗ [ − 2 1 0 ] + 1 ∗ [ − 3 0 1 ] -5*\begin{bmatrix} -2 & 1 & 0 \end{bmatrix}+ 1*\begin{bmatrix} -3 & 0 & 1 \end{bmatrix} −5∗[−210]+1∗[−301]
得到的,一般来说乘就乘了,反正只要能算出结果就行了,但是就是有那么一些聪明的脑子能想出一些更高级的做法,即
LU分解
这是我们之前做消元的过程
E 32 E 31 E 21 A ⇒ U E_{32}E_{31}E_{21}A⇒U E32E31E21A⇒U
他们想出的方法是
E 21 − 1 E 31 − 1 E 32 − 1 E 32 E 31 E 21 A ⇒ E 21 − 1 E 31 − 1 E 32 − 1 U E_{21}^{-1}E_{31}^{-1}E_{32}^{-1}E_{32}E_{31}E_{21}A⇒E_{21}^{-1}E_{31}^{-1}E_{32}^{-1}U E21−1E31−1E32−1E32E31E21A⇒E21−1E31−1E32−1U
这里你可能还看不出来这个方法有什么吊,不就是把逆矩阵挪到右边了吗,我们根据上面那个例子来整理一下LU分解的运算过程。
首先明确一点,求消元的初等变换阵的逆矩阵只要把对应的数变号就可以了
A = [ 1 0 0 4 1 0 0 0 1 ] ⇒ A − 1 = [ 1 0 0 − 4 1 0 0 0 1 ] A=\begin{bmatrix} 1 & 0 & 0 \\ 4 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}⇒ A^{-1}=\begin{bmatrix} 1 & 0 & 0 \\ -4 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} A=⎣⎡140010001⎦⎤⇒A−1=⎣⎡1−40010001⎦⎤
[ 1 1 2 2 3 6 3 8 9 ] = [ 1 0 0 2 1 0 3 0 1 ] [ 1 0 0 0 1 0 0 5 1 ] [ 1 1 2 0 1 2 0 0 − 7 ] \begin{bmatrix} 1 & 1 & 2\\ 2 & 3 & 6 \\ 3 & 8 & 9 \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0\\ 2 & 1 & 0 \\ 3 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & 5 & 1 \end{bmatrix} \begin{bmatrix} 1 & 1 & 2\\ 0 & 1 & 2 \\ 0 & 0 & -7 \end{bmatrix} ⎣⎡123138269⎦⎤=⎣⎡123010001⎦⎤⎣⎡100015001⎦⎤⎣⎡10011022−7⎦⎤
而如果想将两次变换变为一次,即可计算
[ 1 0 0 2 1 0 3 0 1 ] [ 1 0 0 0 1 0 0 5 1 ] = [ 1 0 0 2 1 0 3 5 1 ] \begin{bmatrix} 1 & 0 & 0\\ 2 & 1 & 0 \\ 3 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & 5 & 1 \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0\\ 2 & 1 & 0 \\ 3 & 5 & 1 \end{bmatrix} ⎣⎡123010001⎦⎤⎣⎡100015001⎦⎤=⎣⎡123015001⎦⎤
计算结果就是两个矩阵的简单组合,根本不需要乘运算
所以解
A
x
=
b
Ax=b
Ax=b变为
L
U
x
=
b
LUx=b
LUx=b ,所以先解
L
y
=
b
Ly=b
Ly=b 再解
U
x
=
y
Ux=y
Ux=y
来看一个例子(设b为[1,2,3,4])
A = [ 1 1 1 1 1 2 1 2 1 2 2 3 1 2 2 4 ] ⇒ [ 1 1 1 1 0 1 0 1 0 1 1 2 0 1 1 3 ] ⇒ [ 1 1 1 1 0 1 0 1 0 0 1 1 0 0 1 2 ] ⇒ [ 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 ] A\!=\!\begin{bmatrix} 1 & 1 & 1 & 1\\ 1 & 2 & 1 & 2\\ 1 & 2 & 2 & 3\\ 1 & 2 & 2 & 4 \end{bmatrix}\!⇒\! \begin{bmatrix} 1 & 1 & 1 & 1\\ 0 & 1 & 0 & 1\\ 0 & 1 & 1 & 2\\ 0 & 1 & 1 & 3 \end{bmatrix}\!⇒\! \begin{bmatrix} 1 & 1 & 1 & 1\\ 0 & 1 & 0 & 1\\ 0 & 0 & 1 & 1\\ 0 & 0 & 1 & 2 \end{bmatrix}\!⇒\! \begin{bmatrix} 1 & 1 & 1 & 1\\ 0 & 1 & 0 & 1\\ 0 & 0 & 1 & 1\\ 0 & 0 & 0 & 1 \end{bmatrix} A=⎣⎢⎢⎡1111122211221234⎦⎥⎥⎤⇒⎣⎢⎢⎡1000111110111123⎦⎥⎥⎤⇒⎣⎢⎢⎡1000110010111112⎦⎥⎥⎤⇒⎣⎢⎢⎡1000110010101111⎦⎥⎥⎤
L 为 [ 1 0 0 0 − 1 1 0 0 − 1 0 1 0 − 1 0 0 1 ] [ 1 0 0 0 0 1 0 0 0 − 1 1 0 0 − 1 0 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 − 1 1 ] 逆 矩 阵 的 组 合 L为\begin{bmatrix} 1 & 0 & 0 & 0\\ -1 & 1 & 0 & 0\\ -1 & 0 & 1 & 0\\ -1 & 0 & 0 & 1 \end{bmatrix}\!\! \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & -1 & 1 & 0\\ 0 & -1 & 0 & 1 \end{bmatrix}\!\! \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & -1 & 1 \end{bmatrix}逆矩阵的组合 L为⎣⎢⎢⎡1−1−1−1010000100001⎦⎥⎥⎤⎣⎢⎢⎡100001−1−100100001⎦⎥⎥⎤⎣⎢⎢⎡10000100001−10001⎦⎥⎥⎤逆矩阵的组合
L = [ 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 ] ⇒ [ 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 ] y = [ 1 2 3 4 ] ⇒ y = [ 1 1 1 1 ] L=\begin{bmatrix} 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0\\ 1 & 1 & 1 & 0\\ 1 & 1 & 1 & 1 \end{bmatrix}⇒ \begin{bmatrix} 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0\\ 1 & 1 & 1 & 0\\ 1 & 1 & 1 & 1 \end{bmatrix}y= \begin{bmatrix} 1\\2\\3\\4 \end{bmatrix}⇒ y=\begin{bmatrix} 1\\1\\1\\1 \end{bmatrix} L=⎣⎢⎢⎡1111011100110001⎦⎥⎥⎤⇒⎣⎢⎢⎡1111011100110001⎦⎥⎥⎤y=⎣⎢⎢⎡1234⎦⎥⎥⎤⇒y=⎣⎢⎢⎡1111⎦⎥⎥⎤
⇒ [ 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 ] x = [ 1 1 1 1 ] ⇒ x = [ 0 , 0 , 0 , 1 ] ⇒\begin{bmatrix} 1 & 1 & 1 & 1\\ 0 & 1 & 0 & 1\\ 0 & 0 & 1 & 1\\ 0 & 0 & 0 & 1 \end{bmatrix}x= \begin{bmatrix} 1\\1\\1\\1 \end{bmatrix}⇒x=[0,0,0,1] ⇒⎣⎢⎢⎡1000110010101111⎦⎥⎥⎤x=⎣⎢⎢⎡1111⎦⎥⎥⎤⇒x=[0,0,0,1]
当然,消元过程中还可能出现交换行的情况,所以在LU分解前我们需要给原矩阵做一些交换行的处理,让我们的LU分解可以顺畅的做下去(在消元过程中不再交换)matlab 中有一些算法能做到这一点,在此我们不做讨论(主要是我也不知道:)),我们只给出LU分解的完全体形式
P
A
=
L
U
\color{red}\enspace PA=LU
PA=LU
最后还想说的一点是关于转置,
A
i
j
=
A
j
i
T
A_{ij}=A^{T}_{ji}
Aij=AjiT 这样的概念不必多说,我想聊几个有很好特性的矩阵,比如交换行的矩阵P,它们满足
A
T
=
A
−
1
A^T=A^{-1}
AT=A−1
且阶数固定时这类矩阵的个数满足n!
比如三阶矩阵有6个这样的矩阵
[
1
0
0
0
1
0
0
0
1
]
[
1
0
0
0
0
1
0
1
0
]
[
0
1
0
1
0
0
0
0
1
]
[
0
1
0
0
0
1
1
0
0
]
[
0
0
1
1
0
0
0
1
0
]
[
0
0
1
0
1
0
1
0
0
]
\begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 0 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \end{bmatrix}
⎣⎡100010001⎦⎤⎣⎡100001010⎦⎤⎣⎡010100001⎦⎤⎣⎡001100010⎦⎤⎣⎡010001100⎦⎤⎣⎡001010100⎦⎤
还有一类矩阵满足 A T = A A^{T}=A AT=A ,即对称阵,而任何矩阵乘自己的转置一定得到对称阵,反之亦然,用公式描述为
A A T i s s y m m e t r i c ⋙ A i s s y m m e t r i c ⇒ ∃ B s . t . A = B ∗ B T AA^{T}\;is\;symmetric \ggg A\;is\;symmetric⇒\exist Bs.t.\enspace A=B*B^T AATissymmetric⋙Aissymmetric⇒∃Bs.t.A=B∗BT。