高斯消元:好像是……小学算术?

三角形,圆形,正方形

这是一个小学的小朋友都会的问题——多元一次方程。解的方式也很简单:就是配,把未知数一个一个约掉,最后求出来一个未知数,然后带入回去,一个一个求出所有的未知数。

面对更多的未知数的问题怎么办呢?那当然是慢慢配呗。那怎么去配,约掉未知数呢?解决这个问题方法很多,不过相较于求最大公倍数的方法,我们其实还有一个更快的方法。

高斯消元

方程也可以是矩阵!

来看下面这个二元一次方程:

{2x1+x2=34x1+3x2=5\left\{ \begin{aligned} 2x_1+x_2=3\\ 4x_1+3x_2=5 \end{aligned} \right.

你应该能够熟练得用矩阵表达它了吧,就像这样:

[2143]×[x1x2]=[35]\left[\begin{matrix}2&1\\4&3\\\end{matrix}\right]\times\left[\begin{matrix}x_1\\x_2\\\end{matrix}\right]=\left[\begin{matrix}3\\5\\\end{matrix}\right]

但是呢,为了简化,我们后面会把这类矩阵简化成这种形式,它们被称作增广矩阵

[214335]\left [ \begin{array}{c:c} \begin{matrix} 2&1\\ 4&3 \end{matrix}& \begin{matrix} 3 \\ 5 \end{matrix} \end{array} \right ]

形成梯形!

开始之前,我们来说一下步骤:首先,我们需要先用第一行与下面的每一行进行加减,消去x1x_1并保留这一行。

然后用第二行与下面每一行进行加减,消掉x2x_2,并保留这一行。

以此类推,如果结果理想,我们就会在最后一行得到类似xn=bx_n=b的等式,然后返回向上依次带入,就能得到最终结果啦~

我们不如举个例子完成一下上述过程。但是上面的例子太简单啦,所以我们换一个三元一次方程入手:

[210031321367]\left [ \begin{array}{c:c} \begin{matrix} 2&1&0\\ 0&3&-1\\ 3&2&1 \end{matrix}& \begin{matrix} 3 \\ -6 \\ 7 \end{matrix} \end{array} \right ]

我们发现,第二行已经没有x1x_1项了,所以它的第一步已经完成了,所以甩到后面去,就像这样:

[210321031376]\left [ \begin{array}{c:c} \begin{matrix} 2&1&0\\ 3&2&1\\ 0&3&-1 \end{matrix}& \begin{matrix} 3 \\ 7 \\ -6 \end{matrix} \end{array} \right ]

然后,我们将第二行加上第一行的32-\frac{3}{2}倍,我们就消掉了x1x_1

[21001210313526]\left [ \begin{array}{c:c} \begin{matrix} 2&1&0\\ 0&\frac{1}{2}&1\\ 0&3&-1 \end{matrix}& \begin{matrix} 3 \\ \frac{5}{2} \\ -6 \end{matrix} \end{array} \right ]

好,然后我们将第三行加上第二行的-6倍,我们我们就消掉了x2x_2

[210012100731221]\left [ \begin{array}{c:c} \begin{matrix} 2&1&0\\ 0&\frac{1}{2}&1\\ 0&0&-7 \end{matrix}& \begin{matrix} 3 \\ -\frac{1}{2} \\ -21 \end{matrix} \end{array} \right ]

所以我们在最后一行得到7x3=21-7x_3=-21,所以x3=3x_3=3

带入到第二行,得到x2=1x_2=-1

这两个结果带入到第一行,得到x1=2x_1=2

唔,结果可以这样表示(其实也就是完成了上述过程):

[100010001213]\left [ \begin{array}{c:c} \begin{matrix} 1&0&0\\ 0&1&0\\ 0&0&1 \end{matrix}& \begin{matrix} 2 \\ -1 \\ 3 \end{matrix} \end{array} \right ]

自由变量

其实实际情况根本不可能这么顺利,上面仅仅是一个完美的例子而已。比如,在实际情况中,化简到的最后形式变成了:

[21040121000070000312210]\left [ \begin{array}{c:c} \begin{matrix} 2&1&0&4\\ 0&\frac{1}{2}&1&0\\ 0&0&0&-7\\ 0&0&0&0 \end{matrix}& \begin{matrix} 3 \\ -\frac{1}{2} \\ -21\\ 0 \end{matrix} \end{array} \right ]

形成了上梯形之后,有效的等式只有三个(说明行之间线性相关啦)。那么此时,我们以往上带入的顺序,将它们叫做自由变量

比如在这里,我们知道x4=3x_4=3,但是在上一行带入时卡住了,此时就需要将x3x_3定义为自由变量来表示x2x_2,即x2=2x31x_2=-2x_3-1

回到第一行,发现表达x1x_1也可以用自由变量x3x_3表示,所以无需追加自由变量。方程有无穷多个解,且可以仅用一个自由变量表示。

没有结果!?

唔,其实还有这种可能:

[171021000212]\left [ \begin{array}{c:c} \begin{matrix} 1&7&-1\\ 0&2&1\\ 0&0&0 \end{matrix}& \begin{matrix} 2 \\ -1 \\ 2 \end{matrix} \end{array} \right ]

最后一行变成了0=20=2,这明显不可能成立!就是说,这个方程无解

自小学开始

向观察,配凑的解方程方法说再见?作为走出小学的大学生,我们现在可以选择直接用分数硬凑啦。但不要忘记,高斯消元也只是解方程的一种模式而已,小学的目测来配凑其实也是正确的做法~