消元法
消元法是高斯首次提出用来求解n元n次方程组的方法,这是一个很自然有效的方法,它可以求解方程组的解也可以判断无解的情况。主要包括消元和回代两个步骤即可求出方程组的解。例如以下方程组
{
x
+
2
y
+
z
=
2
3
x
+
8
y
+
z
=
12
0
x
+
4
y
+
z
=
2
\begin{cases} x+2y+z=2\\ 3x+8y+z=12\\ 0x+4y+z =2 \end{cases}
⎩⎪⎨⎪⎧x+2y+z=23x+8y+z=120x+4y+z=2
根据上一节对应的矩阵形式Ax = b 为
[
1
2
1
3
8
1
0
4
1
]
[
x
y
z
]
=
[
2
12
2
]
\left[ \begin{array} {ccc} 1&2&1\\ 3&8&1\\ 0&4&1 \end{array} \right] \left[ \begin{array} {ccc} x\\ y\\ z \end{array} \right]= \left[ \begin{array} {ccc} 2\\ 12\\ 2 \end{array} \right]
⎣⎡130284111⎦⎤⎣⎡xyz⎦⎤=⎣⎡2122⎦⎤
按照我们以前做消元法的思路,我们对系数矩阵A进行变换如下(当然向量b也会做对应的变化,这里我们先考虑A)。
[
[1]
2
1
3
8
1
0
4
1
]
(row2-3row1)
⟶
[
[1]
2
1
0
[2]
−
2
0
4
1
]
(row3-2row2)
⟶
[
[1]
2
1
0
[2]
−
2
0
0
[5]
]
\left[ \begin{array} {ccc} \text{[1]} &2&1\\ 3&8&1\\ 0&4&1 \end{array} \right] \text{(row2-3row1)} \longrightarrow \left[ \begin{array} {ccc} \text{[1]} &2&1\\ 0&\text{[2]}&-2\\ 0&4&1 \end{array} \right] \text{(row3-2row2)} \longrightarrow \left[ \begin{array} {ccc} \text{[1]}&2&1\\ 0&\text{[2]}&-2\\ 0&0&\text{[5]} \end{array} \right]
⎣⎡[1]30284111⎦⎤(row2-3row1)⟶⎣⎡[1]002[2]41−21⎦⎤(row3-2row2)⟶⎣⎡[1]002[2]01−2[5]⎦⎤
- 第一步,在第一个方程以下得所有方程中消去x项,在矩阵A中就需要将主元一以下得所有x项变为0。因此我们将主元行一乘以3可以消去第二行得x,第三行x得位置已经是0,所以不需做任何操作。
- 第二步,在第二个方程以下所有方程中消去y项目,选定主元二,将第二行以下所有y项变为0。因此我们进一步消元操作可以得到最终得矩阵:
U = [ [1] 2 1 0 [2] − 2 0 0 [5] ] U = \left[ \begin{array} {ccc} \text{[1]}&2&1\\ 0&\text{[2]}&-2\\ 0&0&\text{[5]} \end{array} \right] U=⎣⎡[1]002[2]01−2[5]⎦⎤
注意到第三行消元过后仅剩一个非零元素,所以它就成为第三个主元。做到这里就算消元完成了。
再来讨论一下消元失效的情形:首先,主元不能为零;其次,如果在消元时遇到主元位置为零,则需要交换行,使主元不为零;如果换行也无法解决问题,则可以得出方程无解,或者矩阵不可逆(下一节)。 - 回代,以上得矩阵变换只处理了系数矩阵A,要得到最终解需要对结果向量b也进行相应得处理,这时我们在A矩阵后面加上bb向量写成增广矩阵(augmented matrix)的形式:
[ A ∣ b ] = [ 1 2 1 2 3 8 1 12 0 4 1 2 ] ⟶ [ 1 2 1 2 0 2 − 2 6 0 4 1 2 ] ⟶ [ 1 2 1 2 0 2 − 2 6 0 0 5 − 10 ] = [ U ∣ c ] \left[ A|b \right] = \left[ \begin{array}{ccc|c} 1&2&1&2\\ 3&8&1&12\\ 0&4&1&2 \end{array} \right] \longrightarrow \left[ \begin{array} {ccc|c} 1&2&1&2\\ 0&2&-2&6\\ 0&4&1&2 \end{array} \right] \longrightarrow \left[ \begin{array} {ccc|c} 1&2&1&2\\ 0&2&-2&6\\ 0&0&5&-10 \end{array} \right] = \left[ U|c \right] [A∣b]=⎣⎡1302841112122⎦⎤⟶⎣⎡1002241−21262⎦⎤⟶⎣⎡1002201−2526−10⎦⎤=[U∣c]
最终的矩阵即为【U|c】,对应的方程组为
{
x
+
2
y
+
z
=
2
2
y
−
2
z
=
6
5
z
=
−
10
\begin{cases} x+2y+z=2\\ 2y-2z=6\\ 5z =-10 \end{cases}
⎩⎪⎨⎪⎧x+2y+z=22y−2z=65z=−10
可求得解为 z=-2,y=1,x=2。
矩阵消元
矩阵乘法
上面我们通过消元的方式得到了最终的系数矩阵,那么如何通过矩阵的计算得到我们要的结果呢?这要用到矩阵的乘法,上一节我们讨论了矩阵乘以向量可以看成是矩阵列的线性组合,即:
[
c
o
l
1
c
o
l
2
c
o
l
3
]
×
[
a
b
c
]
=
a
×
c
o
l
1
+
b
×
c
o
l
2
+
c
×
c
o
l
3
\left[ \begin{array} {ccc} col_1&col_2&col_3\\ \end{array} \right] × \left[ \begin{array} {ccc} a\\ b\\ c \end{array} \right] = a×col_1 + b×col_2 + c×col_3
[col1col2col3]×⎣⎡abc⎦⎤=a×col1+b×col2+c×col3
考虑到消元法中讲的都是行变换,我们需要矩阵乘法中按行的情况。即一个行向量乘以矩阵可以看成是矩阵行的线性组合,即
[
a
b
c
]
×
[
r
o
w
1
r
o
w
2
r
o
w
3
]
=
a
×
r
o
w
1
+
b
×
r
o
w
2
+
c
×
r
o
w
3
\left[ \begin{array} {ccc} a&b&c\\ \end{array} \right] × \left[ \begin{array} {ccc} row_1\\ row_2\\ row_3 \end{array} \right] = a×row_1 + b×row_2 + c×row_3
[abc]×⎣⎡row1row2row3⎦⎤=a×row1+b×row2+c×row3
消元的矩阵解释
回到消元矩阵的步骤,第一步们将矩阵A的第二行减去三倍行一,其他行保持不变。即:
[
?
?
?
?
?
?
?
?
?
]
×
[
1
2
1
3
8
1
0
4
1
]
=
[
1
2
1
0
2
−
2
0
4
1
]
\left[ \begin{array} {ccc} ?&?&?\\ ?&?&?\\ ?&?&?\\ \end{array} \right] × \left[ \begin{array} {ccc} 1&2&1\\ 3&8&1\\ 0&4&1 \end{array} \right] = \left[ \begin{array} {ccc} 1&2&1\\ 0&2&-2\\ 0&4&1 \end{array} \right]
⎣⎡?????????⎦⎤×⎣⎡130284111⎦⎤=⎣⎡1002241−21⎦⎤
我们把所求矩阵称为初等矩阵
E
2
1
E_21
E21,因为我们用它来将位置(2,1)变为0,设结果矩阵为
A
′
A'
A′,利用上面行向量乘法,
A
′
A'
A′的每一行都是矩阵X对应行针对矩阵
A
A
A行向量的线性组合,要得到
A
′
A'
A′,即
E
21
×
A
=
A
′
E_{21}×A=A'
E21×A=A′,则有:
{
E
2
1
r
o
w
1
×
A
=
A
r
o
w
1
′
E
2
1
r
o
w
2
×
A
=
A
r
o
w
2
′
E
2
1
r
o
w
3
×
A
=
A
r
o
w
3
′
\begin{cases} E_{21_{row1}}×A=A'_{row1}\\ E_{21_{row2}}×A=A'_{row2}\\ E_{21_{row3}}×A=A'_{row3}\\ \end{cases}
⎩⎪⎨⎪⎧E21row1×A=Arow1′E21row2×A=Arow2′E21row3×A=Arow3′
由此可以得到:
[
1
0
0
−
3
1
0
0
0
1
]
×
[
1
2
1
3
8
1
0
4
1
]
=
[
1
2
1
0
2
−
2
0
4
1
]
\left[ \begin{array} {ccc} 1&0&0\\ -3&1&0\\ 0&0&1\\ \end{array} \right] × \left[ \begin{array} {ccc} 1&2&1\\ 3&8&1\\ 0&4&1 \end{array} \right] = \left[ \begin{array} {ccc} 1&2&1\\ 0&2&-2\\ 0&4&1 \end{array} \right]
⎣⎡1−30010001⎦⎤×⎣⎡130284111⎦⎤=⎣⎡1002241−21⎦⎤
(这里补充一下,根据上面等式,不难看出如果
X
=
[
1
0
0
0
1
0
0
0
1
]
X= \left[\begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\\end{array}\right]
X=⎣⎡100010001⎦⎤ 则有
X
×
A
=
A
X×A=A
X×A=A,这时我们把
X
X
X称为单位矩阵
I
I
I)。
同理,第二步我们有初等矩阵
E
32
E_{32}
E32,即将第三行第二个元素变为零,将第三行减去两倍的行二,即
E
32
×
A
′
=
U
E_{32}×A'=U
E32×A′=U,即
{
E
3
2
r
o
w
1
×
A
′
=
U
r
o
w
1
E
3
2
r
o
w
2
×
A
′
=
U
r
o
w
2
E
3
2
r
o
w
3
×
A
′
=
U
r
o
w
3
\begin{cases} E_{32_{row1}}×A'=U_{row1}\\ E_{32_{row2}}×A'=U_{row2}\\ E_{32_{row3}}×A'=U_{row3}\\ \end{cases}
⎩⎪⎨⎪⎧E32row1×A′=Urow1E32row2×A′=Urow2E32row3×A′=Urow3
由此可以得到:
[
1
0
0
0
1
0
0
−
2
1
]
×
[
1
2
1
0
2
−
2
0
4
1
]
=
[
1
2
1
0
2
−
2
0
0
5
]
\left[ \begin{array} {ccc} 1&0&0\\ 0&1&0\\ 0&-2&1\\ \end{array} \right] × \left[ \begin{array} {ccc} 1&2&1\\ 0&2&-2\\ 0&4&1 \end{array} \right] = \left[ \begin{array} {ccc} 1&2&1\\ 0&2&-2\\ 0&0&5 \end{array} \right]
⎣⎡10001−2001⎦⎤×⎣⎡1002241−21⎦⎤=⎣⎡1002201−25⎦⎤
矩阵消元至此结束,每一步用到一个初等矩阵,回顾一下这两个步骤我们是如何从矩阵
A
A
A得到矩阵
U
U
U的呢。通过公式描述以上过程如下:
E
32
×
(
E
21
×
A
)
=
U
E_{32}×(E_{21}×A) = U
E32×(E21×A)=U矩阵乘法虽然不能随意变动相乘次序,但是可以变动括号位置,也就是满足结合律(associative law),因此如下等式成立:
(
E
32
×
E
21
)
×
A
=
U
(E_{32}×E_{21})×A = U
(E32×E21)×A=U
这样我们就可以通过一个矩阵解决所有消元操作,设
E
=
E
32
×
E
21
E=E_{32}×E_{21}
E=E32×E21,下一节我们将讨论如何得到
E
E
E