为什么要学消元
高斯消元把方程组改写成一系列主元方程,让我们能够读出它的解。每一阶段先选定
主元,清掉它下方的元素,再处理剩余的行与列。每一步都要保持解集不变,同时
让下一个变量更容易分离出来。
本节先说明目标形状,再走完一次计算:先区分 REF 与 RREF,然后用完整例子
观察每个主元如何建立,以及最后的矩阵如何描述全部解。
目标:主元形成阶梯
我们想得到的,不只是“比较简单的矩阵”,而是方便读出结构的矩
阵。
实际操作时,你会不断做下面几件事:
- 选一个主元,
- 把它下面的元素清掉,
- 转到右下角更小的子矩阵,
- 如果想得到最容易直接阅读的形式,再把主元上面的元素也清掉。
所以,消元其实是在一步一步建立一条主元阶梯。
定义
REF 与 RREF
矩阵属于 行阶梯形(REF),表示:
- 全 0 行都放在最下面;
- 每一个非零行的第一个非零元素,都比上一行的第一个非零元素更靠
右。
矩阵属于 最简行阶梯形(RREF),则还要再满足:
- 每个主元都等于 1;
- 每个主元所在的列,除了那个主元之外,其余位置全部都是 0。
每一个非零行最左边的第一个非零元素,叫做 主元。含有主元的列,
叫做 主元列。当增广系统一致时,没有主元的系数列才对应 自由变量;常数列不对应未知量。
这些词汇很重要,因为后面判断“唯一解 / 无限多解 / 无解”时,就是靠
它们。
定理
为什么行化简是安全的?
如果两个增广矩阵是行等价的,那么它们代表的是等价方程组,也就是
说,它们有相同的解集。
所以,行化简不是在改题目,而是在重新排列同一题的信息。
两个问题:合法的路径与有用的终点
概念视角算法
高斯消元是在行等价类中选择一条算法路径
行等价回答哪些改变合法,高斯消元回答怎样选择这些改变,使有限的计算抵达容易读懂的形式。两个问题并不相同。不断交换同一对行,每一步都保留解集,却不会完成求解。一个有效算法既需要保持不变的对象,也需要能够持续前进的指标。
这里的不变量是增广系统的解集。向下消元的进展则是主元逐行下移,并且严格向右移动。一旦某个主元下方已经清零,后续只对更低的行运算,就不会破坏那些零。局部化简能够逐步累积,而不是互相抵消,正是算法成立的关键。
更精确地说,先观察尚未处理的行,寻找其中最靠左且含非零元素的一列。必要时交换行,把可用元素移到未处理部分的第一行,作为主元,并清除它下方的元素。随后转到更低的行,只向右继续寻找。如果某一列在尚未处理的行中全为零,就跳过该列,不必尝试除以零,也不必硬造一个主元。
“最靠左”这一要求有证明上的作用:新的主元出现以前,所有尚未处理的行在更左位置都是零。对这些行取线性组合,仍然保持这个零前缀。因此,新行的首个非零元素不会跑到先前主元的左边。阶梯条件是算法逐步建立的不变量,而不是算完之后碰巧成立的外观。
如果尚未处理的行全部为零,向下消元立即结束。否则,每选一个主元都会占用新的一行和新的一列。行数与列数有限,所以步骤必然终止。这个论证说明阶梯形总能构造出来,而不依赖某个特别简单的数值例子;但它尚未证明阶梯形唯一。不同的合法选择仍可产生不同的主元数值和主元上方元素。
向上清除为何不会破坏已经完成的列
从 REF 开始,先把每个非零主元缩放为一,再从最后一个主元行向上处理。要清除某个主元上方的元素,就减去主元行的适当倍数。主元行在首个非零元素以前全为零,因此不会改变更早的主元列;它右侧已经清理完的主元列,在当前行中也都是零,所以同样不会被破坏。
这样,每完成一列,该列便只有主元位置的 1 非零。逐步向上处理,最后所有主元列都满足这个条件,便得到 RREF。这个证明也说明,按确定次序清除通常比到处任意代换更容易检查。
仅要求 REF 时,不必把主元变成一:二或负三都可以作为首个非零元素。要求 RREF 时,主元必须为一,这是定义中的额外条件。一致的阶梯系统已经可以用回代求解;继续化成简化阶梯形,是为了直接展示所有主变量如何依赖参数。
算法的存在性和最终简化结果的唯一性是两个不同定理。消元过程证明至少能达到某个 RREF;唯一性定理说明,从同一矩阵出发,不同合法路径若都完成了 RREF,所得矩阵必定相同。因此,中间步骤不同并不表示出错,但两个不同的最终 RREF 不能同时正确。后面的专节会给出唯一性证明。
走一次完整的消元路径
消元法的核心做法,是由增广矩阵开始,
然后反复利用主元去清掉它下面的元素。现在我们沿着这个思路看一个
小例子:
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,就可以直接读解。
看主元阶梯如何形成
下面的图解序列沿用同一个例子。你可以把它当成正式行变换与互动步骤器
之间的桥:每一格都先固定一个数学目的,然后才进入下一步计算。
由主元阶梯到 RREF把同一个消元例子看成一段短图解:选主元、清元素,最后从 RREF 读出已解方程组。
由增广矩阵开始
第一列在第 1 行已有方便的主元。眼前目标是把这个主元下方的元素全部变成 0。
建立主元阶梯
第一次清下方元素之后,下一个主元出现在第 2 行第 2 列。再清它下方的元素,就得到行阶梯形。
标准化最后主元
最后一个非零行的 leading entry 是 -1。把整行乘以 -1,主元变成 1,但解集不变。
清主元上方
只有当每个主元都是所在列唯一的非零元素时,才到达 RREF;因此后半段运算会向上清除。
读出已解变量
当左边变成单位矩阵,右边一列就可以直接读成 x = 2、y = -3、z = 4。
这个计算不是一堆互不相干的行变换,而是有控制地改变形状:先清主元下方得到 REF,再标准化主元并清主元上方得到 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.
跳过一列也是数学信息
例题
第一列为零,算法仍能正常结束
把最后一列看作常数列,考虑三个未知量的系统:
[00204363].第一列全零,因此主元从第二列开始。分别把两行的主元缩放成一,然后清除第二个主元上方的元素:
[00102131]R1←R1−2R2[00100111].结果给出 x2=1、x3=1,却没有限制 x1。所以所有解为 (t,1,1),其中 t∈R。代回原来的两行,得到 2+4=6 和 3=3,都与参数无关。跳过第一列并没有遗漏方程或丢失条件,因为这个变量从一开始就没有出现在任何方程中。
这个例子也说明主元不必在主对角线上。阶梯形由每行首个非零元素的位置决定,并不要求第一行一定从第一列开始。在较大的矩阵中,两个相邻主元之间也可以隔着多个非主元列。
处理增广矩阵时,变量列和常数列必须分清。最后一列出现主元,代表的是矛盾,而不是多了一个可求出的变量。因此要先检查一致性,之后才能把非主元系数列解释为可任意指定的解坐标。非主元列也不一定全零:其中的元素可以记录自由变量怎样影响多个主变量。
例如,前面结构例子中含有系数三和负二的列虽然不是零列,却仍然没有主元。相应变量可以自由选值,但主变量要随之调整。“自由”是说它可以作为独立选择,不是说它对其他方程没有影响。
不重算整题,也能分层检查
检查每个箭头时,先核对目标位置是否按计划改变,再核对整条受影响的行,特别是最后一列。随后检查所宣称的形式:REF 要满足阶梯条件并把全零行放在底部;RREF 还要有单位主元和干净的主元列。两类检查针对不同错误。算术完全正确也可能尚未达到 RREF;外观看起来正确的矩阵,也可能来自错误运算。
最后把参数表达式代回化简后的方程。既然每一步都可逆,同一表达式也满足原系统。把自由参数全设成零只能检查一个特殊解;完整检查要保留参数,并核对各参数的系数。否则,方向向量里的负号错误可能被一个恰好正确的特殊解掩盖。
常见错误
常见错误
REF 不等于 RREF
很多人只要看到主元下面全是 0 就停手。那样可能已经足够做回代,但
还没有到 RREF。RREF 要求主元所在的列,其他位置也全部是 0。
常见错误
做操作时没有明确目标
不要因为“好像要减一下”就随便做行变换。每一步之前,先把目的说清
楚:
- 你现在用的是哪个主元?
- 你想消去哪一个元素?
- 为什么这一步是最自然的下一步?
这个习惯会让你的计算更稳定,也更容易检查符号错误。
快速检查
思考检查
什么情况下应该先换行,再继续消元?
想一想当前的主元位置。如果那个位置是 0,但同一列更下面有非零元
素,会怎样处理?
解答 · 答案
当当前的主元位置不能用,例如它是 0,但同一列下面有非零元素时,
就应该先换行,把可用的主元移上来,然后再继续消元。
思考检查
[0001] 是一行无害的数据吗?
解答 · 答案
不是。它代表 0=1,是矛盾,所以方程组不相容,也就是无解。
思考检查
在上面的长消元例子中,为什么 x2、x4、x6 是自由变量?
看最后的 RREF C′。哪些变量列含有首 1?
解答 · 答案
首 1 位于第 1、3、5 列。因此第 2、4、6 列没有主元,
所以 x2、x4、x6 是自由变量。
练习
练习 1
由
120131251382
开始,如果你的目标是清掉第一个主元下面的元素,最自然的第一步行变
换是什么?
解答 · 练习 1 引导解答
第一个主元已经是第 1 行第 1 列的 1。它下面的元素是 2,所以最自
然的做法是
R2←R2−2R1.这一步可以一次把第 1 列主元下方的元素清掉。
练习 2
考虑矩阵
1000102−10430.
它代表的系统有唯一解、无限多解,还是无解?
解答 · 练习 2 引导解答
这里没有矛盾行,所以不是无解。但第 3 列没有主元,因此存在自由变
量。只要有自由变量,解就不是唯一,而是无限多解。
练习 3
由
100030000100110020104−130
开始,哪一个单步行变换可以把它化成 RREF?
解答 · 练习 3 引导解答
第 5 列的主元是第 3 行的 1。同一主元列中唯一还没有清掉的非零
元素,是第 1 行的 2,所以应该从第 1 行减去两倍第 3 行:
R1←R1−2R3.
练习 4
对于 RREF
1000200001001−10000102−11015−30,
令 x2=u、x4=v、x6=w。把 x1、x3、x5 写成 u、
v、w 的式子。
解答 · 练习 4 引导解答
读出三条非零行:
x1+2u+v+2wx3−v−wx5+w=1,=5,=−3.因此
x1=1−2u−v−2w,x3=5+v+w,x5=−3−w.
先读这一页
这一页直接建立在
2.2 增广矩阵与行变换
之上。如果你对“为什么行变换不会改变解集”仍然觉得不稳,请先回去
重读那一页,再练这里的长消元路径。