高斯消元与阶梯形
上一章把线性方程组压缩成了一个短句:Ax=b。这个写法很干净,但它还没有告诉我们怎样把 x 找出来。
这一章就来做这件事。我们的办法有点像整理一张被反复涂改的草稿:每次只做一个能撤销的动作,把不需要的未知数逐列消掉,最后让方程组排成“楼梯”。到了那一步,唯一解、无解还是无穷多解,不用猜,矩阵会自己说出来。
这套方法叫高斯消元。真正值得理解的不是操作顺序,而是背后的原则:式子可以换一种写法,解集不能换。
从 Ax=b 回到方程本身
先看一个两元方程组:
{x+y=42x−y=2
如果把两个方程画成直线,它们交在 (2,2)。所谓“解这个方程组”,就是找出同时落在两条直线上的点。
现在把第二个方程减去第一个方程的 2 倍:
(2x−y)−2(x+y)=2−2×4
整理后得到:
−3y=−6
新方程看起来和原来的第二个方程完全不同,但它和第一个方程配在一起时,公共解仍是 (2,2)。原因不神秘:如果一个点同时满足原来的两个方程,那么它当然也满足“第二式减去第一式的 2 倍”;反过来,如果它满足第一式和这个新方程,把第一式的 2 倍加回去,就能恢复原来的第二式。
这就是行变换能够工作的根基:我们不是随意改方程,而是在用已有方程重新表达同一批条件。
为什么“能撤销”就能保护解集
把方程组中的第 i 行记成 Ri。高斯消元只允许三种初等行变换:

三种操作都能反向做回来,因此变换前后的方程组拥有同一个解集。
交换两行只是调整方程的阅读顺序。某行乘非零数,相当于把等式两边按同一比例放大或缩小。第三种操作稍微绕一点,但只要提供倍数的那一行仍然保留,就能把加进去的部分原样减回去。
一行不能乘以 0。这样做会把一条方程直接抹成 0=0,而原本不满足这条方程的向量也可能混进解集。行变换允许我们改写条件,却不允许删除条件。
增广矩阵中的竖线不是计算边界
一般的三元方程组可以写成增广矩阵:
a11a21a31a12a22a32a13a23a33b1b2b3
竖线左边来自 A,右边来自 b。它只是提醒我们“这里开始是常数列”,不是一道不能越过的墙。对方程两边做同一个操作,翻译到增广矩阵里,就是整行都要变。
例如:
R2←R2−2R1
意味着第二行每个位置都要减去第一行对应位置的 2 倍,最后一个常数也不例外。
消元到底在消什么
第一次看到“把下面的数消成 0”,很容易以为高斯消元只是追求矩阵整齐。其实那些 0 是在切断变量之间的纠缠。
假设第一行和第二行都含有 x1:
a11x1+a12x2+⋯+a1nxna21x1+a22x2+⋯+a2nxn=b1=b2
只要 a11=0,用第一行减掉第二行中的 x1 项并不难:
R2←R2−a11a21R1
因为第二行第一项会变成:
a21−a11a21a11=0
这一步的目的不是制造一个好看的 0,而是让第二个方程以后不再讨论 x1。同样地,我们再用第二行处理它下面的 x2,让第三行不再讨论 x1,x2。变量一层层减少,最后一行往往只剩一个未知数,于是回代就有了起点。
主元是消元的支点
每一轮消元都要选一个非零数作为支点。这个数叫主元,它所在的行叫主元行,所在的列叫主元列。
如果当前主元是 ajj,要消去它下方第 i 行的 aij,使用的倍数是:
ℓij=ajjaij
随后做:
Ri←Ri−ℓijRj
这里最容易忽略的是“为什么先选主元”。因为消元倍数要除以主元,主元必须非零;同时,这一行还要继续保留,供下面所有行使用。
候选主元是 0,先换行
来看这个增广矩阵:
[032147]
左上角是 0,不能拿它去消元,更不能拿别的数除以它。但第一列下面有一个 3,所以交换两行:
R1↔R2
得到:
[301274]
现在 3 和 2 都能成为主元,回代也有了清楚的顺序。
如果当前列从当前行往下全是 0,那就不是“算法坏了”,而是这一列提供不了新的主元。保留这些 0,向右找下一列即可。后面我们会看到,这种被跳过的变量列正是自由变量出现的地方。
向前消元的完整路线
从最左边还没处理的列开始,在当前行及其下方寻找非零数。找到后把它换到当前行,选作主元;整列都找不到,就跳到右边一列。
用主元行消去主元下方的所有数。每次操作都改完整一行,目的是让下面的方程不再含有这个主元变量。
把注意力移到主元的右下方,重复找主元和向下消元。新主元必须出现在上一主元的右边,楼梯形状由此形成。
得到阶梯形后,先检查有没有矛盾行。没有矛盾时,再从最下面的非零行开始回代,或者继续向上消元得到行最简形。
阶梯形和行最简形分别告诉我们什么
一个矩阵处于阶梯形,需要满足三件事:
- 所有非零行都在零行上方;
- 每个非零行的第一个非零数,都在上一行主元的右边;
- 每个主元下方都是 0。
例如:
2000−150001003−26047−10
主元依次位于第 1、第 2、第 4 列,位置像楼梯一样向右下方移动。第 3 个未知数所在列没有主元,所以它不会在任何一行里成为“第一个要解出的变量”。
阶梯形已经足够解题
阶梯形的最后一个非零方程只含最后几个变量。先从那里求出最靠后的主元变量,再把结果代回上一行,这就是回代。
把一个上三角系统写成:
⎩⎨⎧u11x1+u12x2+u13x3=c1u22x2+u23x3=c2u33x3=c3
只要三个主元 u11,u22,u33 都非零,就可以从底部开始:
x3=u33c3
接着求 x2,最后求 x1。顺序不能倒过来,因为第一行还缠着三个未知数,最后一行却只剩一个。

回代从最下面的主元开始。每向上一行,已经求出的变量就少制造一个未知数。
行最简形把关系直接摊开
行最简形先要是阶梯形,还要再满足两个条件:
- 每个主元都等于 1;
- 主元所在列除了这个 1,其余位置全是 0。
从阶梯形得到行最简形,要先把主元缩放成 1,再从右往左向上消元。向前消元是为了建立楼梯,向上消元是为了清空主元上方,让每个主元变量单独站出来。
例如:
1001101−1−16−1−3
先把第三行乘以 −1,再依次向上消元:
R3←−R3,R2←R2+R3,R1←R1−R2−R3
得到:
100010001123
现在不用回代,右端常数就是答案。阶梯形通常更省手算,行最简形通常更方便读出参数关系。它们没有谁“更正确”,只是完成程度不同。
同一个矩阵可以通过不同的合法路线得到不同的阶梯形,但最后的行最简形是唯一的。手算时不必追求和别人一模一样的中间过程,只需保证每步合法、最终结果一致。
完整例题:唯一解怎样被一层层剥出来
解方程组:
⎩⎨⎧x+y+z=62x+3y+z=11x−y+2z=5
先写增广矩阵:
12113−11126115
第一行第一列的 1 很适合做主元。我们用它消掉下面的 2 和 1:
R2←R2−2R1,R3←R3−R1得到:
10011−21−116−1−1第一列下方已经清零。也就是说,后两行不再含 x,接下来只需整理 y,z 的关系。
第二行第二列的 1 是下一个主元。用它消掉第三行的 −2:
R3←R3+2R2得到阶梯形:
1001101−1−16−1−3第三行只剩 z,向前消元的任务已经完成。
从最后一行回代。−z=−3 给出 z=3;第二行 y−z=−1 给出 y=2;第一行 x+y+z=6 给出 x=1。
因此:
(x,y,z)=(1,2,3)
别急着收笔。把答案代回原方程,而不是代回已经化简的矩阵:
1+2+3=6
2×1+3×2+3=11
1−2+2×3=5
三条原方程都成立,所以这个解通过了验算。三个变量列都有主元,没有任何变量可以自由取值,因此解只有这一个。
完整例题:矛盾行怎样宣布无解
看这个方程组:
⎩⎨⎧x+y−z=12x+2y−2z=3x−y+z=0
它的增广矩阵是:
12112−1−1−21130
用第一行消去第二行第一列:
R2←R2−2R1
得到:
10110−1−101110
第二行翻译回方程就是:
0x+0y+0z=1
也就是 0=1。任何 x,y,z 都不可能让它成立,所以可以立刻停止:原方程组无解。
从原方程也能看见冲突。第二个方程左边恰好是第一个方程左边的 2 倍;如果第一个方程右边是 1,第二个右边就必须是 2,可题目偏偏要求它等于 3。矛盾不是消元制造出来的,消元只是把原本藏着的矛盾翻到了明面上。
看到矛盾行就应先判定无解。即使别的变量列没有主元,也不能再说“有自由变量,所以无穷多解”。没有任何解时,自由取值根本无从谈起。
完整例题:自由变量怎样带来无穷多解
再看一个四元方程组:
⎩⎨⎧x1+x2+2x4=42x1+3x2+x3+3x4=10−x1+x2+3x3−x4=5
写成增广矩阵:
12−113101323−14105
先向前消元
第一轮用 R1 消去第一列下方:
R2←R2−2R1,R3←R3+R1
得到:
1001120132−11429
第二轮用 R2 消去第三行第二列:
R3←R3−2R2
得到阶梯形:
1001100112−13425
主元在第 1、第 2、第 3 列,第 4 列没有主元。因此 x1,x2,x3 是主元变量,x4 是自由变量。
让自由变量先开口
“自由”不是说这个变量可以被忽略,而是说方程组没有把它锁定成某个固定数字。令:
x4=t,t∈R
从第三行开始回代:
x3+3t=5
所以:
x3=5−3t
第二行给出:
x2+x3−t=2
代入 x3=5−3t:
x2=−3+4t
第一行给出:
x1+x2+2t=4
因此:
x1=7−6t
完整参数解是:
x1x2x3x4=7−6t=−3+4t=5−3t=tt∈R
也可以把它写成更能看出结构的向量形式:
x1x2x3x4=7−350+t−64−31,t∈R
第一个向量是令 t=0 时得到的一组具体解;第二个向量描述了 t 每增加 1,整个解向量怎样移动。以后学习零空间时,我们会再次看到这种“一个固定解加上一条自由方向”的结构。
验算参数解,不要只验一个参数
把参数表达式代回第一条原方程:
(7−6t)+(−3+4t)+2t=4
含 t 的部分抵消,恒等于 4。第二条原方程得到:
2(7−6t)+3(−3+4t)+(5−3t)+3t=10
第三条原方程得到:
−(7−6t)+(−3+4t)+3(5−3t)−t=5
两式中的 t 也都完全抵消。这说明不是“某几个 t 碰巧可用”,而是每个实数 t 都给出一组解。实数有无穷多个,所以解也有无穷多个。
多个自由变量时,一个变量配一个参数
下面这个阶梯形更适合练习“读矩阵”:
100200010−1403−20
主元位于第 1、第 3 列,所以 x2,x4 自由。令 x2=s、x4=t,就有:
x1=3−2s+t,x3=−2−4t

主元变量要由方程求出,自由变量先取参数。两个自由变量对应两个彼此独立的可调参数。
三类解怎样从阶梯形里读出来
消元结束后,先别急着数主元。判断顺序只有两步。
先找矛盾行
如果增广矩阵中出现:
[0000d],d=0
它代表 0=d,方程组无解。也可以说,增广列出现了一个系数部分无法配合的主元。
没有矛盾,再看变量列
设方程组共有 n 个未知数。
- 如果每个变量列都有主元,所有变量都能由回代确定,所以有唯一解。
- 如果至少一个变量列没有主元,就有自由变量。每个自由变量都能任取实数,所以有无穷多解。

先查矛盾,再查自由变量。这个顺序可以避开大多数误判。
全零行 0=0 本身既不代表无穷多解,也不代表无解。它只说明这一行没有提供新的约束。最终是哪一类解,仍要看有没有矛盾行,以及变量列是否都有主元。
方程数量也不能直接决定解的类型。方程比未知数多,可能只是多了重复条件;方程和未知数一样多,也可能出现互相冲突或重复的方程。真正可靠的信息来自消元后的主元和矛盾行。
手算时最容易出错的地方
只改系数,不改常数
例如做 R2←R2−2R1,必须连增广线右边一起减。漏掉常数列,相当于左边换了方程,右边却还留在旧题里,得到的已经不是等价系统。
把一个表达式当成行变换
只写 R2−2R1 没有说明谁被替换。清楚的写法是:
R2←R2−2R1
箭头左边告诉我们“新第二行放回第二行”,第一行保持不动。
在同一批操作里混用新旧行
如果先做:
R2←R2−2R1
再做:
R3←R3+R2
第二步里的 R2 默认是已经更新后的第二行。如果你本来想用旧第二行,就不能把这两步含混地挤在一起。最稳妥的做法是每完成一轮就写出新矩阵。
遇到 0 主元还继续除
候选主元为 0 时先向下找非零数并换行。下面也全为 0,就跳过这一列。除以 0 不是消元步骤,硬做只会让后面所有计算失去意义。
把“出现零行”当成无穷多解
零行只说明有冗余条件。若每个变量列仍有主元,系统照样可能有唯一解;若另有矛盾行,系统仍然无解。
回代正确,却抄错原题
手算过程越长,越容易在一开始抄错符号。最后把答案代回原方程组,可以同时检查计算和抄写。参数解则要做恒等验算,确认参数项在每条原方程中都按要求抵消。
练习
练习一:哪些操作保持解集
判断下面哪些操作一定保持解集不变。
- R1↔R3
- R2←−4R2
- R3←R3+5R1
- R2←0R2
- 只把增广矩阵左侧的 R1 乘以 2,右端常数不变
第 1、2、3 个操作保持解集。交换可以再交换回来;乘以 −4 可以再乘以 −1/4;加上 5R1 可以再减去 5R1。第 4 个操作会抹掉一条方程。第 5 个操作没有对等式两边做同样的事,已经改成了另一个方程组。
练习二:消元、回代并验算
解方程组:
⎩⎨⎧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=2、x=−1,所以:
(x,y,z)=(−1,2,1)代回原方程:−1+4−1=2,−2+10+1=9,1−2+2=1,三式都成立。
练习三:找出无解的原因
判断下面方程组的解,并说明是哪一步暴露了结论。
{x−2y=32x−4y=8
对第二行做:
R2←R2−2R1增广矩阵变成:
[10−2032]第二行表示 0=2,所以无解。原式中第二个方程的左边是第一个方程左边的 2 倍,但右边 8 不是 3 的 2 倍,这就是冲突来源。
练习四:写出两个参数的解
把下面的阶梯形增广矩阵写成参数解和向量形式:
100−2000103−10450
主元在第 1、第 3 列,所以 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=ts,t∈R向量形式为:
x1x2x3x4=4050+s2100+t−3011,s,t∈R
练习五:从阶梯形继续做到行最简形
把下面的阶梯形化成行最简形:
200110−123346
先归一化第三个主元:
R3←31R3再用第三行向上消去第三列:
R2←R2−2R3,R1←R1+R3此时矩阵为:
200110001502用第二行消去第一行第二列,再把第一行主元归一化:
R1←R1−R2,R1←21R1得到行最简形:
1000100012502因此唯一解是 (x,y,z)=(5/2,0,2)。
从消元走向矩阵运算与逆矩阵
这一章里,我们一直把矩阵当成一张方便修改的方程记录表。现在可以把整条路线压缩成一句话:先对增广矩阵做向前消元,把 A 整理成阶梯形;再通过回代,求出满足 Ax=b 的 x。
如果一个方阵在每个变量列都有主元,那么无论右端 b 怎样变化,消元和回代都会把每个变量唯一确定。下一章会换一个视角:把这些行操作看成矩阵运算,并追问能不能用一个矩阵把 Ax=b 的过程“倒过来”。这正是逆矩阵出现的地方。