高斯消元与阶梯形
上一章把线性方程组写成了矩阵方程 Ax=b,也把增广矩阵作为记录工具。本章要做一件更实际的事:用有限次、可检查的行变换,把一个方程组化成容易读的形状。
高斯消元的目标不是“把数字变漂亮”,而是保留原方程组的全部解,同时把信息整理出来。阶梯形告诉我们哪里有主元,哪里有自由变量;回代把主元变量算出来;行最简形则把答案直接摆在矩阵里。

行变换会改变方程组的外观,但不改变代表解集的交点。
为什么行变换不改变解集
一个线性方程组的每一行都是一个方程。对行做操作,其实是在用已有方程制造新的等价方程。只要这个操作能反向做回来,就不会丢掉任何解,也不会凭空增加解。
例如有两行方程 R1 和 R2。如果把第二行替换成 R2−2R1,得到的新方程组中仍然保留 R1。从新方程组出发,也可以把第二行加回 2R1,恢复原来的 R2。所以两边的解完全一样。
高斯消元中真正被保护的是解集。矩阵里的行、数字和方程外观可以变化,但所有能同时满足方程组的向量 x 必须保持不变。
把方程组写成增广矩阵时,竖线左边是系数矩阵,右边是常数列:
a11a21a31a12a22a32a13a23a33b1b2b3
行变换必须作用在整行上,包括竖线右边的常数。只改左边不改右边,相当于换了一个问题。
三种允许的行变换
高斯消元只使用三种初等行变换。它们看起来简单,但共同点很关键:每一种都可以反向执行。

三种初等行变换都能反向做,所以解集不变。
第二种行变换里,倍数不能是 0。把一整行乘以 0 会把一个方程抹掉,通常会扩大解集;这不是等价变换。
消元的核心动作
消元的基本想法是:先选一个主元,用它把下方同列的数消成 0。然后到下一行、下一列继续做,直到非零行形成楼梯状。
设第一列第一行的数 a11 不是 0。为了消去第二行第一列的数 a21,可以做:
R2←R2−a11a21R1
这个倍数叫消元倍数。它的作用很单纯:让新第二行的第一项变成
a21−a11a21a11=0
如果当前位置是 0,不要硬除。先在下面找一个非零数换上来;如果这一列从当前行往下全是 0,就跳到下一列找主元。
先从最左边还没有处理的列开始找主元。如果当前行的候选主元是 0,就尝试和下面某一行交换;找不到非零数时,说明这一列没有新的主元。
找到主元后,用主元所在行消去它下面同列的数。每次倍加都要整行一起改,增广矩阵右端也要跟着变。
当前列处理完后,向右下方移动。新的主元必须在上一主元的右边,这样矩阵会逐步形成阶梯。
得到阶梯形后,如果每个主元都已经确定,就从最后一个方程开始回代;如果有非主元列,就把对应变量设成参数。
阶梯形和行最简形
阶梯形的重点是“楼梯”。每个非零行的第一个非零数叫这一行的主元;越往下,主元越靠右;主元下面全是 0。零行如果出现,要放在最下面。
行最简形比阶梯形更进一步。每个主元都化成 1,并且主元所在列除了这个 1 以外全是 0。从阶梯形继续向上消元并把主元归一化,就能得到行最简形。

阶梯形通过继续向上消元并归一化得到行最简形,行最简形的主元为 1,且主元列上下清零。
例如下面的矩阵是阶梯形:
2000−150001003−26047−10
它的主元分别在第 1、第 2、第 4 列。第 3 列没有主元,所以对应变量会成为自由变量。
阶梯形适合手算,因为它已经足够回代。行最简形适合读结构,因为每个主元列都像一个坐标轴,主元变量和自由变量的关系更直接。
例题:用阶梯形回代
解下面的方程组:
⎩⎨⎧x+y+z=62x+3y+z=11x−y+2z=5
对应的增广矩阵是:
12113−11126115
用第一行作为第一列的主元行,先消去第一列下面的两个数:
R2←R2−2R1,R3←R3−R1得到:
10011−21−116−1−1用第二行作为第二列的主元行,消去第三行第二列的 −2:
R3←R3+2R2得到阶梯形:
1001101−1−16−1−3从最后一行开始回代。第三行给出 −z=−3,所以 z=3。第二行给出 y−z=−1,代入 z=3 得到 y=2。第一行给出 x+y+z=6,所以 x=1。

回代从最后一个方程开始,先解最靠后的主元,再代回前面的方程。
因此方程组有唯一解:
(x,y,z)=(1,2,3)
从阶梯形读出变量
在一个阶梯形矩阵中,含有主元的列叫主元列。主元列对应的未知数叫主元变量;没有主元的未知数叫自由变量。

主元列决定主元变量,非主元列给自由变量;一个自由变量对应一个参数。
看下面这个增广矩阵:
100200−110110320
主元在第 1 列和第 3 列,所以 x1、x3 是主元变量。第 2 列和第 4 列没有主元,所以 x2、x4 是自由变量。
设:
x2=s,x4=t
第二行给出:
x3+x4=2
所以:
x3=2−t
第一行给出:
x1+2x2−x3+x4=3
代入 x2=s、x3=2−t、x4=t:
x1+2s−(2−t)+t=3
因此:
x1=5−2s−2t
完整参数解是:
x1x2x3x4=5−2s−2t=s=2−t=t
其中 s,t 可以取任意实数。自由变量越多,解集的自由方向越多。
读出解的类型
把增广矩阵化到阶梯形后,解的类型通常可以直接读出来。

从增广矩阵的矛盾行、主元数量和自由变量判断解的类型。
如果出现矛盾行:
[00001]
它代表:
0=1
这不可能成立,所以方程组无解。
如果没有矛盾行,并且每个未知数所在列都有主元,那么每个变量都会被确定,方程组有唯一解。
如果没有矛盾行,但至少有一个未知数列没有主元,那么这些变量是自由变量,方程组有无穷多解。
判断顺序很重要:先看有没有矛盾行,再看有没有自由变量。只要出现矛盾行,方程组就是无解,即使别的列看起来还有自由变量也没有意义。
真实问题中的消元
很多应用题最后都会落到线性方程组上。电路中用节点电流和回路电压列方程,桥架或桁架中用受力平衡列方程,化学配平中用每种元素的原子数守恒列方程。建模部分可能来自物理或化学,但求解阶段经常就是消元。
例如一个电路里有三个未知电流 i1,i2,i3。节点守恒和回路电压可能给出:
⎩⎨⎧i1−i2−i3=04i1+2i2=126i3−2i2=3
这个系统是否有唯一电流分配,取决于消元后是否每个未知数都有主元。这里的主元不是抽象符号,它对应模型里真正被约束住的未知量。
常见错误
消元中的错误常常不是因为概念太难,而是因为某一步没有同时维护“等价”和“顺序”。
最危险的错误是只改增广矩阵左边,不改右端常数。行变换作用在整行上,竖线只是视觉分隔,不是计算边界。
把行变换写得不够明确
写 R2−2R1 只是一个表达式,不等于告诉读者哪一行被替换。推荐写:
R2←R2−2R1
这样可以清楚地知道只有第二行改变,第一行保留。
在同一步里混用已经改变的行
如果先做 R2←R2−2R1,再做 R3←R3+R2,第二个操作里的 R2 已经是新第二行。手算时最好一行一行写清,避免把旧行和新行混在一起。
过早宣布自由变量
自由变量来自最终阶梯形或行最简形的非主元列。还没完成消元时,某一列暂时没有主元,不代表它最终一定是自由变量。
忽略零主元
遇到候选主元为 0 时,不能除以它。先尝试换行;如果下面全是 0,这一列没有主元,向右找下一列。
练习
练习一:判断行变换是否合法
下面哪些操作一定保持解集不变?
- R1↔R3
- R2←0R2
- R3←R3−5R1
- 只把增广矩阵左边的第二行乘以 2,右边常数不变
合法的是 1 和 3。交换两行只是改变方程顺序;用一行加上另一行的倍数可以反向恢复。第 2 个操作把一行乘以 0,会丢掉一个方程。第 4 个操作没有对整行做同一个变换,已经改变了原方程组。
练习二:消元并回代
解方程组:
⎩⎨⎧x+2y−z=22x+5y+z=9−x−y+2z=1
增广矩阵为:
12−125−1−112291先做 R2←R2−2R1,R3←R3+R1:
100211−131253再做 R3←R3−R2:
100210−13−225−2回代得 z=1,y+3z=5,所以 y=2;再由 x+2y−z=2 得 x=−1。答案是:
(x,y,z)=(−1,2,1)
练习三:写出参数解
把下面的阶梯形矩阵翻译成参数解:
100−2000103−10450
主元在第 1 列和第 3 列,所以 x1,x3 是主元变量,x2,x4 是自由变量。设 x2=s,x4=t。第二行给出 x3−t=5,所以 x3=5+t。第一行给出 x1−2s+3t=4,所以 x1=4+2s−3t。参数解为:
x1x2x3x4=4+2s−3t=s=5+t=t其中 s,t 为任意实数。
练习四:判断解的类型
不用继续化简,判断下面阶梯形对应的方程组解的类型:
1000102−10340
没有矛盾行,第三列没有主元,所以 x3 是自由变量。这个方程组有无穷多解。若设 x3=t,则 x1=3−2t,x2=4+t。
本章小结
高斯消元把线性方程组变成阶梯形。它只允许使用可逆的初等行变换,所以解集保持不变。阶梯形用于回代,行最简形用于直接读结构。
主元列告诉我们哪些变量被方程约束住;非主元列给出自由变量。没有矛盾行时,自由变量会带来参数解;出现矛盾行时,方程组无解。后面学习秩、零空间和四个基本子空间时,本章的主元和自由变量会继续出现。