消元法,这个方法最早由高斯提出,也叫高斯消元法:是为了求解线性方程组的。应用消元法求解的时候,通常会应用以下三种变换,并且每一种变换都不会改变方程组的解:
- 交换方程组中任意两个方程的位置;
- 用一个数乘某一个方程的左右两边;
- 将一个方程的两边乘一个数然后加到另一个方程上。
求解三元方程组$ \left\{ \begin{eqnarray*}x & + & 2y & + & z & = & 2 \\3x & + & 8y & + & z & = & 12 \\\mbox{ } & \mbox{ } & 4y & + & z & = & 2\end{eqnarray*} \right.$ ,对应的矩阵形式 $\boldsymbol{A} \boldsymbol{x} = \boldsymbol{b}$ 为 $\left[ \begin{array}{ccc}1 & 2 & 1 \\3 & 8 & 1 \\0 & 4 & 1\end{array} \right]\left[ \begin{array}{c}x \\y \\z\end{array} \right]=\left[ \begin{array}{c}2 \\12 \\2\end{array} \right]$ 。按照消元法的思路:
- 我们希望在第二个方程中消去 $x$ 项,操作系数矩阵$\boldsymbol{A}=\left[ \begin{array}{ccc}\underline{1} & 2 & 1 \\3 & 8 & 1 \\0 & 4 & 1\end{array} \right]$ ,下划线的元素为主元(pivot):\[\left[ \begin{array}{ccc}\underline{1} & 2 & 1 \\3 & 8 & 1 \\0 & 4 & 1\end{array} \right]\xrightarrow{row_2 - 3row_1}\left[ \begin{array}{ccc}\underline{1} & 2 & 1 \\0 & 2 & -2 \\0 & 4 & 1\end{array} \right]\] 这里我们先不管 $\boldsymbol{b}$ 向量,等做完 $\boldsymbol{A}$ 的消元可以再做 $\boldsymbol{b}$ 的消元。(这是MATLAB等工具经常使用的算法。)
- 我们希望在第三个方程中消去 $y$ 项,现在第二行第一个非零元素成为了第二个主元:\[\left[ \begin{array}{ccc}\underline{1} & 2 & 1 \\0 & \underline{2} & -2 \\0 & 4 & 1\end{array} \right]\xrightarrow{row_3 - 2row_2}\left[ \begin{array}{ccc}\underline{1} & 2 & 1 \\0 & \underline{2} & -2 \\0 & 0 & \underline{5}\end{array} \right]\] 注意到第三行消元过后仅剩一个非零元素,所以它就成为第三个主元。做到这里就算消元完成了。再来讨论一下消元失效的情形:
- 首先,主元不能为零;
- 其次,如果在消元时遇到主元位置为零,则需要交换行,使主元不为零;
- 最后提一下,如果我们把第三个方程 $z$ 前的系数成 $-4$ ,会导致第二步消元时最后一行全部为零,则第三个主元就不存在了,至此消元不能继续进行了,这就是下一讲中涉及的不可逆情况。
- 接下来就该回代(back substitution)了,这时我们在 $\boldsymbol{A}$ 矩阵后面加上 $\boldsymbol{b}$ 向量写成增广矩阵(augmented matrix)的形式:\[[ \begin{array}{c|c} \boldsymbol{A} & \boldsymbol{b} \end{array} ]=\left[ \begin{array}{ccc|c}1 & 2 & 1 & 2 \\3 & 8 & 1 & 12 \\0 & 4 & 1 & 2\end{array} \right]\rightarrow\left[ \begin{array}{ccc|c}1 & 2 & 1 & 2 \\0 & 2 & -2 & 6 \\0 & 4 & 1 & 2\end{array} \right]\rightarrow\left[ \begin{array}{ccc|c}1 & 2 & 1 & 2 \\0 & 2 & -2 & 6 \\0 & 0 & 5 & -10\end{array} \right]\] 不难看出,$z$ 的解已经出现了,此时方程组变为$\left\{ \begin{eqnarray*}x & + & 2y & + & z & = & 2 \\\mbox{ } & \mbox{ } & 2y & - & 2z & = & 6 \\\mbox{ } & \mbox{ } & \mbox{ } & \mbox{ } & 5z & = & -10\end{eqnarray*} \right.$ ,从第三个方程求出 $z = -2$ ,代入第二个方程求出 $y = 1$,再代入第一个方程求出 $x = 2$。
上一讲我们学习了矩阵乘以向量的方法,有三个列向量的矩阵乘以另一个向量,按列的线性组合可以写作 $\left[ \begin{array}{ccc} v_1 & v_2 & v_3 \end{array} \right]\left[ \begin{array}{c} 3 \\ 4 \\ 5 \end{array} \right]= 3v_1 + 4v_2 + 5v_3$ 。
但现在我们希望用矩阵乘法表示行操作,则有$\left[ \begin{array}{ccc} 1 & 2 & 7 \end{array} \right]\left[ \begin{array}{c} row_1 \\ row_2 \\ row_3 \end{array} \right]= 1row_1 + 2row_2 + 7row_3$ 。易看出这里是一个行向量从左边乘以矩阵,这个行向量按行操作矩阵的行向量,并将其合成为一个矩阵行向量的线性组合。
介绍到这里,我们就可以将消元法所做的行操作写成向量乘以矩阵的形式了:
- 消元法第一步操作为将第二行改成 $row_2 - 3row_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]$ 。这个消元矩阵将第二行第一个元素变为零,我们将其记作 $\boldsymbol{E}_{21}$ 。另外,如果三行都不变,消元矩阵就是单位矩阵 $\boldsymbol{I}=\left[ \begin{array}{ccc}1 & 0 & 0 \\0 & 1 & 0 \\0 & 0 & 1\end{array} \right]$ ,$\boldsymbol{I}$ 之于矩阵运算相当于 $1$ 之于四则运算。
- 接下来就是求 $\boldsymbol{E}_{32}$ 消元矩阵了,即将第三行第二个元素变为零,则 $\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]$ 。这就是消元所用的两个初等矩阵(elementary matrix) 。
- 最后,我们将这两步综合起来,即$\boldsymbol{E}_{32}(\boldsymbol{E}_{21} \boldsymbol{A}) = \boldsymbol{U}$ ,也就是说如果我们想从 $\boldsymbol{A}$ 矩阵直接得到 $\boldsymbol{U}$ 矩阵的话,只需要$\boldsymbol{E}_{32}(\boldsymbol{E}_{21} \boldsymbol{A})$ 即可。
矩阵乘法虽然不能随意变动相乘次序,但是可以变动括号位置,也就是满足结合律(associative law),而结合律在矩阵运算中非常重要,很多定理的证明都需要巧妙的使用结合律。
既然提到了消元用的初等矩阵,那我们再介绍常用的置换矩阵(permutation matrix) :
- $\left[ \begin{array}{cc}0 & 1 \\1 & 0\end{array} \right]\left[ \begin{array}{cc}a & b \\c & d\end{array} \right]=\left[ \begin{array}{cc}c & d \\a & b\end{array} \right]$ ,置换矩阵将原矩阵的两行做了互换。
- $\left[ \begin{array}{cc}a & b \\c & d\end{array} \right]\left[ \begin{array}{cc}0 & 1 \\1 & 0\end{array} \right]=\left[ \begin{array}{cc}c & d \\a & b\end{array} \right]$ ,置换矩阵将原矩阵的两列做了互换。
我们现在能够将 $\boldsymbol{A}$ 通过行变换写成 $\boldsymbol{U}$ ,
那么如何从 $\boldsymbol{U}$ 再变回 $\boldsymbol{A}$ ,也就是求消元的逆运算。
对某些“坏”矩阵,并没有逆 ,而本讲的例子都是“好”矩阵。
现在,我们以 $\boldsymbol{E}_{21}$ 为例,什么矩阵可以撤销这次的行变换,即$[?]\left[ \begin{array}{ccc}1 & 0 & 0 \\-3 & 1 & 0 \\0 & 0 & 1\end{array} \right]=\left[ \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\0 & 0 & 1\end{array} \right]$ 。这次变换是从第二行中减去三倍的第一行,那么其逆变换就是给第二行加上三倍的第一行,所以逆矩阵就是$\left[ \begin{array}{ccc}1 & 0 & 0 \\3 & 1 & 0 \\0 & 0 & 1\end{array} \right]$ 。
我们把矩阵 $\boldsymbol{E}$ 的逆记作 $\boldsymbol{E}^{-1}$ ,所以有$\boldsymbol{E}^{-1} \boldsymbol{E} = \boldsymbol{I}$。