消元法
消元法是高斯首次提出用来求解n元n次方程组的方法,这是一个很自然有效的方法,它可以求解方程组的解也可以判断无解的情况。主要包括消元和回代两个步骤即可求出方程组的解。例如以下方程组
{x+2y+z=23x+8y+z=120x+4y+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 为
[121381041][xyz]=[2122]
\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]21381041](row2-3row1)⟶[[1]210[2]−2041](row3-2row2)⟶[[1]210[2]−200[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]210[2]−200[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]=[1212381120412]⟶[121202−260412]⟶[121202−26005−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+2y+z=22y−2z=65z=−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。
矩阵消元
矩阵乘法
上面我们通过消元的方式得到了最终的系数矩阵,那么如何通过矩阵的计算得到我们要的结果呢?这要用到矩阵的乘法,上一节我们讨论了矩阵乘以向量可以看成是矩阵列的线性组合,即:
[col1col2col3]×[abc]=a×col1+b×col2+c×col3
\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
考虑到消元法中讲的都是行变换,我们需要矩阵乘法中按行的情况。即一个行向量乘以矩阵可以看成是矩阵行的线性组合,即
[abc]×[row1row2row3]=a×row1+b×row2+c×row3
\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的第二行减去三倍行一,其他行保持不变。即:
[?????????]×[121381041]=[12102−2041]
\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⎦⎤
我们把所求矩阵称为初等矩阵E21E_21E21,因为我们用它来将位置(2,1)变为0,设结果矩阵为A′A'A′,利用上面行向量乘法,A′A'A′的每一行都是矩阵X对应行针对矩阵AAA行向量的线性组合,要得到A′A'A′,即E21×A=A′E_{21}×A=A'E21×A=A′,则有:
{E21row1×A=Arow1′E21row2×A=Arow2′E21row3×A=Arow3′
\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′
由此可以得到:
[100−310001]×[121381041]=[12102−2041]
\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=[100010001]X= \left[\begin{array}{ccc}1&0&0\\0&1&0\\0&0&1\\\end{array}\right]X=⎣⎡100010001⎦⎤ 则有 X×A=AX×A=AX×A=A,这时我们把XXX称为单位矩阵III)。
同理,第二步我们有初等矩阵E32E_{32}E32,即将第三行第二个元素变为零,将第三行减去两倍的行二,即E32×A′=UE_{32}×A'=UE32×A′=U,即
{E32row1×A′=Urow1E32row2×A′=Urow2E32row3×A′=Urow3
\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
由此可以得到:
[1000100−21]×[12102−2041]=[12102−2005]
\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⎦⎤
矩阵消元至此结束,每一步用到一个初等矩阵,回顾一下这两个步骤我们是如何从矩阵AAA得到矩阵UUU的呢。通过公式描述以上过程如下:
E32×(E21×A)=U
E_{32}×(E_{21}×A) = U
E32×(E21×A)=U矩阵乘法虽然不能随意变动相乘次序,但是可以变动括号位置,也就是满足结合律(associative law),因此如下等式成立:
(E32×E21)×A=U
(E_{32}×E_{21})×A = U
(E32×E21)×A=U
这样我们就可以通过一个矩阵解决所有消元操作,设E=E32×E21E=E_{32}×E_{21}E=E32×E21,下一节我们将讨论如何得到EEE
2847

被折叠的 条评论
为什么被折叠?



