为什么要学消元
很多同学第一次接触高斯消元时,都会觉得它像一堆死规则:
- 换行,
- 乘一行,
- 减一行,
- 一直做到矩阵看起来“整齐”为止。
这个理解太弱。
高斯消元真正的作用,是把本来难读的方程组,逐步改写成容易阅读的
形式。每一步行变换都应该回答一个很清楚的问题,例如:
- 我下一步想把哪个变量的位置弄清楚?
- 哪个元素正在阻碍我?
- 用哪个操作,可以在不改变解集的情况下制造更多 0?
如果你一直带着这些问题去做,消元就不再像机械重复,而会变成一种
有方向的阅读方法。
先讲直觉:我们想得到什么形状?
我们想得到的,不只是“比较简单的矩阵”,而是方便读出结构的矩
阵。
实际操作时,你会不断做下面几件事:
- 选一个主元,
- 把它下面的元素清掉,
- 转到右下角更小的子矩阵,
- 如果想得到最容易直接阅读的形式,再把主元上面的元素也清掉。
所以,消元其实是在一步一步建立一条主元阶梯。
定义
REF 与 RREF
矩阵属于 行阶梯形(REF),表示:
- 全 0 行都放在最下面;
- 每一个非零行的第一个非零元素,都比上一行的第一个非零元素更靠
右。
矩阵属于 最简行阶梯形(RREF),则还要再满足:
- 每个主元都等于
1;
- 每个主元所在的列,除了那个主元之外,其余位置全部都是
0。
每一个非零行最左边的第一个非零元素,叫做 主元。含有主元的列,
叫做 主元列。没有主元的列,对应的是 自由变量。
这些词汇很重要,因为后面判断“唯一解 / 无限多解 / 无解”时,就是靠
它们。
定理
为什么行化简是安全的?
如果两个增广矩阵是行等价的,那么它们代表的是等价方程组,也就是
说,它们有相同的解集。
所以,行化简不是在改题目,而是在重新排列同一题的信息。
走一次完整的消元路径
消元法的核心做法,是由增广矩阵开始,
然后反复利用主元去清掉它下面的元素。现在我们沿着这个思路看一个
小例子:
x+2y+2zx+3y+3z2x+6y+5z=4,=5,=6.
它的增广矩阵是
112236235456.
例题
把每个行变换都读成一个目的
左上角的 1 已经是一个很方便的主元,所以第一个目标很清楚:
把这个主元下面的元素全部变成 0。
做
R2←R2−R1,R3←R3−2R1.就得到
10021221141−2.现在第 1 列已经完成。下一个主元在第 2 行第 2 列,所以用它清掉下面
的 2:
R3←R3−2R2.矩阵变成
10021021−141−4.到这一步,其实已经是 REF,可以用回代法解题。不过,如果你想得到最
方便直接阅读的形式,就继续做成 RREF。
先把最后一个主元改成 1:
R3←−R3⇒100210211414.然后清掉这个主元上方的元素:
R1←R1−2R3,R2←R2−R3,得到
100210001−4−34.最后,再把第二个主元上方的 2 清掉:
R1←R1−2R2,就得到 RREF
1000100012−34.这时解可以直接读出:
x=2,y=−3,z=4.
这个例子要你记住的,不是孤立的步骤,而是下面的节奏:
- 清主元下面的元素,建立 REF;
- 清主元上面的元素,建立 RREF;
- 到了 RREF,就可以直接读解。
用互动步骤器再走一次
下面的步骤器保留同一条消元路径,但刻意放慢节奏。每到一步,都请你
同时观察:
- 正在处理哪一个主元;
- 正在做哪一个行变换;
- 做完之后,哪一部分变得更容易读。
边读边试
跟着走完一条行化简路径
互动步骤器会带你走完一条完整的消元路径,逐步显示行变换、正在处理的主元,以及每一步得到的矩阵。
要留意什么
第 1 列的第一行已经有方便的主元 1,所以暂时不用换行。
先由增广矩阵开始。第一个主元的工作,是帮我们把它下面的元素清掉。
较长的作业式行化简
短例子适合学习基本操作,但真正的作业题通常会检查你能不能把整段计
算保持有组织。难点不只是数字变大,而是每一步都要知道自己正在清哪
一列、建立哪一个主元。
考虑增广矩阵
C=112522410011310120124225111318.
第一列已有可用主元。先清掉它下方的元素,得到
1000200001131−1−1−30124201112−13.
现在第 2 行提供下一个主元。用它清掉下面相同方向的元素:
R3←R3−R2,R4←R4−3R2.
再把之后出现的重复行清掉后,一个清楚的阶梯阶段是
1000200001001−1000110201012−30.
这里要暂停阅读结构:主元列是第 1、3、5 列;自由列是第
2、4、6 列。要到 RREF,只需清掉第 5 列主元上方的元素:
R2←R2−R3.
最后的最简形是
C′=1000200001001−10000102−11015−30.
令
x2=u,x4=v,x6=w.
三条主元方程读成
x1+2x2+x4+2x6x3−x4−x6x5+x6=1,=5,=−3.
所以所有解可以写成
x=1050−30+u−210000+v−101100+w−2010−11.
这个例子说明,长消元的目的不只是制造 0,而是暴露主元与自由变量的
结构,然后由这个结构写出完整解集。
怎样读一个 RREF 矩阵
当矩阵已经在 RREF 时,最重要的阅读问题有三个:
- 每个变量列都有主元吗?
- 有没有自由变量?
- 有没有矛盾行?
例题
先读结构,再做计算
假设你最后得到
1000103−20510.这里第 1、2 列是主元列,但第 3 列不是,所以第三个变量是自由变量。
因此,这个系统不是唯一解。它会有无限多解,因为你可以先自由选
第三个变量,再回头求出另外两个主元变量。
定理
矛盾行代表什么?
如果行化简后出现
[0001],它对应的方程就是 0=1。这不可能成立,所以原方程组不相容,也就
是无解。
例题
矩阵几乎是 RREF 时
有时矩阵已经很接近 RREF,只差某个主元列还没有清干净。例如
100030000100110020104−130还不是 RREF,因为第 5 列的主元上方仍有一个 2。只要做
R1←R1−2R3就得到
10003000010011000010−2−130.现在各主元列已经清干净,所以矩阵在 RREF。自由变量是 x2 和
x4;若令 x2=s、x4=t,则解为
x=−20−103+s−31000+t−10−110.
常见错误
常见错误
REF 不等于 RREF
很多人只要看到主元下面全是 0 就停手。那样可能已经足够做回代,但
还没有到 RREF。RREF 要求主元所在的列,其他位置也全部是 0。
常见错误
做操作时没有明确目标
不要因为“好像要减一下”就随便做行变换。每一步之前,先把目的说清
楚:
- 你现在用的是哪个主元?
- 你想消去哪一个元素?
- 为什么这一步是最自然的下一步?
这个习惯会让你的计算更稳定,也更容易检查符号错误。
快速检查
快速检查
什么情况下应该先换行,再继续消元?
想一想当前的主元位置。如果那个位置是 0,但同一列更下面有非零元
素,会怎样处理?
快速检查
[0 0 0 | 1] 是一行无害的数据吗?
快速检查
在上面的长消元例子中,为什么 x2、x4、x6 是自由变量?
练习
练习 1
由
120131251382
开始,如果你的目标是清掉第一个主元下面的元素,最自然的第一步行变
换是什么?
练习 2
考虑矩阵
1000102−10430.
它代表的系统有唯一解、无限多解,还是无解?
练习 3
由
100030000100110020104−130
开始,哪一个单步行变换可以把它化成 RREF?
练习 4
对于 RREF
1000200001001−10000102−11015−30,
令 x2=u、x4=v、x6=w。把 x1、x3、x5 写成 u、
v、w 的式子。
先读这一页
这一页直接建立在
2.2 增广矩阵与行变换
之上。如果你对“为什么行变换不会改变解集”仍然觉得不稳,请先回去
重读那一页,再练这里的长消元路径。