Evanalysis
2.3预计阅读时间: 24 分钟

2.3 高斯消元与最简行阶梯形

跟着一条完整的行化简路径,学会用 REF 与 RREF 读方程组,而不是靠猜。

课程目录

为什么要学消元

高斯消元把方程组改写成一系列主元方程,让我们能够读出它的解。每一阶段先选定 主元,清掉它下方的元素,再处理剩余的行与列。每一步都要保持解集不变,同时 让下一个变量更容易分离出来。

本节先说明目标形状,再走完一次计算:先区分 REF 与 RREF,然后用完整例子 观察每个主元如何建立,以及最后的矩阵如何描述全部解。

目标:主元形成阶梯

我们想得到的,不只是“比较简单的矩阵”,而是方便读出结构的矩 阵。

实际操作时,你会不断做下面几件事:

  1. 选一个主元,
  2. 把它下面的元素清掉,
  3. 转到右下角更小的子矩阵,
  4. 如果想得到最容易直接阅读的形式,再把主元上面的元素也清掉。

所以,消元其实是在一步一步建立一条主元阶梯。

定义

REF 与 RREF

矩阵属于 行阶梯形(REF),表示:

  1. 全 0 行都放在最下面;
  2. 每一个非零行的第一个非零元素,都比上一行的第一个非零元素更靠 右。

矩阵属于 最简行阶梯形(RREF),则还要再满足:

  1. 每个主元都等于 11;
  2. 每个主元所在的列,除了那个主元之外,其余位置全部都是 00。

每一个非零行最左边的第一个非零元素,叫做 主元。含有主元的列, 叫做 主元列。当增广系统一致时,没有主元的系数列才对应 自由变量;常数列不对应未知量。

这些词汇很重要,因为后面判断“唯一解 / 无限多解 / 无解”时,就是靠 它们。

定理

为什么行化简是安全的?

如果两个增广矩阵是行等价的,那么它们代表的是等价方程组,也就是 说,它们有相同的解集。

所以,行化简不是在改题目,而是在重新排列同一题的信息。

两个问题:合法的路径与有用的终点

概念视角算法

高斯消元是在行等价类中选择一条算法路径

行等价回答哪些改变合法,高斯消元回答怎样选择这些改变,使有限的计算抵达容易读懂的形式。两个问题并不相同。不断交换同一对行,每一步都保留解集,却不会完成求解。一个有效算法既需要保持不变的对象,也需要能够持续前进的指标。

这里的不变量是增广系统的解集。向下消元的进展则是主元逐行下移,并且严格向右移动。一旦某个主元下方已经清零,后续只对更低的行运算,就不会破坏那些零。局部化简能够逐步累积,而不是互相抵消,正是算法成立的关键。

更精确地说,先观察尚未处理的行,寻找其中最靠左且含非零元素的一列。必要时交换行,把可用元素移到未处理部分的第一行,作为主元,并清除它下方的元素。随后转到更低的行,只向右继续寻找。如果某一列在尚未处理的行中全为零,就跳过该列,不必尝试除以零,也不必硬造一个主元。

“最靠左”这一要求有证明上的作用:新的主元出现以前,所有尚未处理的行在更左位置都是零。对这些行取线性组合,仍然保持这个零前缀。因此,新行的首个非零元素不会跑到先前主元的左边。阶梯条件是算法逐步建立的不变量,而不是算完之后碰巧成立的外观。

如果尚未处理的行全部为零,向下消元立即结束。否则,每选一个主元都会占用新的一行和新的一列。行数与列数有限,所以步骤必然终止。这个论证说明阶梯形总能构造出来,而不依赖某个特别简单的数值例子;但它尚未证明阶梯形唯一。不同的合法选择仍可产生不同的主元数值和主元上方元素。

向上清除为何不会破坏已经完成的列

从 REF 开始,先把每个非零主元缩放为一,再从最后一个主元行向上处理。要清除某个主元上方的元素,就减去主元行的适当倍数。主元行在首个非零元素以前全为零,因此不会改变更早的主元列;它右侧已经清理完的主元列,在当前行中也都是零,所以同样不会被破坏。

这样,每完成一列,该列便只有主元位置的 11 非零。逐步向上处理,最后所有主元列都满足这个条件,便得到 RREF。这个证明也说明,按确定次序清除通常比到处任意代换更容易检查。

仅要求 REF 时,不必把主元变成一:二或负三都可以作为首个非零元素。要求 RREF 时,主元必须为一,这是定义中的额外条件。一致的阶梯系统已经可以用回代求解;继续化成简化阶梯形,是为了直接展示所有主变量如何依赖参数。

算法的存在性和最终简化结果的唯一性是两个不同定理。消元过程证明至少能达到某个 RREF;唯一性定理说明,从同一矩阵出发,不同合法路径若都完成了 RREF,所得矩阵必定相同。因此,中间步骤不同并不表示出错,但两个不同的最终 RREF 不能同时正确。后面的专节会给出唯一性证明。

走一次完整的消元路径

消元法的核心做法,是由增广矩阵开始, 然后反复利用主元去清掉它下面的元素。现在我们沿着这个思路看一个 小例子:

x+2y+2z=4,x+3y+3z=5,2x+6y+5z=6.\begin{aligned} x + 2y + 2z &= 4, \\ x + 3y + 3z &= 5, \\ 2x + 6y + 5z &= 6. \end{aligned}

它的增广矩阵是

[122413352656].\begin{bmatrix} 1 & 2 & 2 & 4 \\ 1 & 3 & 3 & 5 \\ 2 & 6 & 5 & 6 \end{bmatrix}.

例题

把每个行变换都读成一个目的

左上角的 11 已经是一个很方便的主元,所以第一个目标很清楚:

把这个主元下面的元素全部变成 00。

做

R2←R2−R1,R3←R3−2R1.R_2 \leftarrow R_2 - R_1, \qquad R_3 \leftarrow R_3 - 2R_1.

就得到

[12240111021−2].\begin{bmatrix} 1 & 2 & 2 & 4 \\ 0 & 1 & 1 & 1 \\ 0 & 2 & 1 & -2 \end{bmatrix}.

现在第 1 列已经完成。下一个主元在第 2 行第 2 列,所以用它清掉下面 的 22:

R3←R3−2R2.R_3 \leftarrow R_3 - 2R_2.

矩阵变成

[1224011100−1−4].\begin{bmatrix} 1 & 2 & 2 & 4 \\ 0 & 1 & 1 & 1 \\ 0 & 0 & -1 & -4 \end{bmatrix}.

到这一步,其实已经是 REF,可以用回代法解题。不过,如果你想得到最 方便直接阅读的形式,就继续做成 RREF。

先把最后一个主元改成 11:

R3←−R3⇒[122401110014].R_3 \leftarrow -R_3 \quad\Rightarrow\quad \begin{bmatrix} 1 & 2 & 2 & 4 \\ 0 & 1 & 1 & 1 \\ 0 & 0 & 1 & 4 \end{bmatrix}.

然后清掉这个主元上方的元素:

R1←R1−2R3,R2←R2−R3,R_1 \leftarrow R_1 - 2R_3, \qquad R_2 \leftarrow R_2 - R_3,

得到

[120−4010−30014].\begin{bmatrix} 1 & 2 & 0 & -4 \\ 0 & 1 & 0 & -3 \\ 0 & 0 & 1 & 4 \end{bmatrix}.

最后,再把第二个主元上方的 22 清掉:

R1←R1−2R2,R_1 \leftarrow R_1 - 2R_2,

就得到 RREF

[1002010−30014].\begin{bmatrix} 1 & 0 & 0 & 2 \\ 0 & 1 & 0 & -3 \\ 0 & 0 & 1 & 4 \end{bmatrix}.

这时解可以直接读出:

x=2,y=−3,z=4.x = 2,\qquad y = -3,\qquad z = 4.

这个例子要你记住的,不是孤立的步骤,而是下面的节奏:

  • 清主元下面的元素,建立 REF;
  • 清主元上面的元素,建立 RREF;
  • 到了 RREF,就可以直接读解。

看主元阶梯如何形成

下面的图解序列沿用同一个例子。你可以把它当成正式行变换与互动步骤器 之间的桥:每一格都先固定一个数学目的,然后才进入下一步计算。

由主元阶梯到 RREF

把同一个消元例子看成一段短图解:选主元、清元素,最后从 RREF 读出已解方程组。

  1. 由增广矩阵开始

    第一列在第 1 行已有方便的主元。眼前目标是把这个主元下方的元素全部变成 0。

  2. 建立主元阶梯

    第一次清下方元素之后,下一个主元出现在第 2 行第 2 列。再清它下方的元素,就得到行阶梯形。

  3. 标准化最后主元

    最后一个非零行的 leading entry 是 -1。把整行乘以 -1,主元变成 1,但解集不变。

  4. 清主元上方

    只有当每个主元都是所在列唯一的非零元素时,才到达 RREF;因此后半段运算会向上清除。

  5. 读出已解变量

    当左边变成单位矩阵,右边一列就可以直接读成 x = 2、y = -3、z = 4。

这个计算不是一堆互不相干的行变换,而是有控制地改变形状:先清主元下方得到 REF,再标准化主元并清主元上方得到 RREF。

用互动步骤器再走一次

下面的步骤器保留同一条消元路径,但刻意放慢节奏。每到一步,都请你 同时观察:

  1. 正在处理哪一个主元;
  2. 正在做哪一个行变换;
  3. 做完之后,哪一部分变得更容易读。

边读边试

跟着走完一条行化简路径

互动步骤器会带你走完一条完整的消元路径,逐步显示行变换、正在处理的主元,以及每一步得到的矩阵。

1224
1335
2656

行变换

先在第 1 列选主元。

要留意什么

第 1 列的第一行已经有方便的主元 1,所以暂时不用换行。

先由增广矩阵开始。第一个主元的工作,是帮我们把它下面的元素清掉。

在较大的方程组中追踪主元

在较大的方程组中,同一套主元策略需要贯穿多步计算。每一步开始前, 指出正在清除哪一列、使用哪个主元;完成后,再检查先前主元列的结构 是否保留。

考虑增广矩阵

C=[120102112101232411251510324118].C= \begin{bmatrix} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 1 & 2 & 1 & 0 & 1 & 2 & 3 \\ 2 & 4 & 1 & 1 & 2 & 5 & 1 \\ 5 & 10 & 3 & 2 & 4 & 11 & 8 \end{bmatrix}.

第一列已有可用主元。先清掉它下方的元素,得到

[1201021001−1102001−121−1003−3413].\begin{bmatrix} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 0 & 0 & 1 & -1 & 1 & 0 & 2 \\ 0 & 0 & 1 & -1 & 2 & 1 & -1 \\ 0 & 0 & 3 & -3 & 4 & 1 & 3 \end{bmatrix}.

现在第 2 行提供下一个主元。用它清掉下面相同方向的元素:

R3←R3−R2,R4←R4−3R2.R_3\leftarrow R_3-R_2, \qquad R_4\leftarrow R_4-3R_2.

再把之后出现的重复行清掉后,一个清楚的阶梯阶段是

[1201021001−1102000011−30000000].\begin{bmatrix} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 0 & 0 & 1 & -1 & 1 & 0 & 2 \\ 0 & 0 & 0 & 0 & 1 & 1 & -3 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}.

这里要暂停阅读结构:主元列是第 11、33、55 列;自由列是第 22、44、66 列。要到 RREF,只需清掉第 55 列主元上方的元素:

R2←R2−R3.R_2\leftarrow R_2-R_3.

最后的最简形是

C′=[1201021001−10−15000011−30000000].C'= \begin{bmatrix} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 0 & 0 & 1 & -1 & 0 & -1 & 5 \\ 0 & 0 & 0 & 0 & 1 & 1 & -3 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}.

令

x2=u,x4=v,x6=w.x_2=u,\qquad x_4=v,\qquad x_6=w.

三条主元方程读成

x1+2x2+x4+2x6=1,x3−x4−x6=5,x5+x6=−3.\begin{aligned} x_1+2x_2+x_4+2x_6 &= 1,\\ x_3-x_4-x_6 &= 5,\\ x_5+x_6 &= -3. \end{aligned}

所以所有解可以写成

x=[1050−30]+u[−210000]+v[−101100]+w[−2010−11].x= \begin{bmatrix} 1\\0\\5\\0\\-3\\0 \end{bmatrix} +u \begin{bmatrix} -2\\1\\0\\0\\0\\0 \end{bmatrix} +v \begin{bmatrix} -1\\0\\1\\1\\0\\0 \end{bmatrix} +w \begin{bmatrix} -2\\0\\1\\0\\-1\\1 \end{bmatrix}.

这个例子说明,长消元的目的不只是制造 0,而是暴露主元与自由变量的 结构,然后由这个结构写出完整解集。

怎样读一个 RREF 矩阵

当矩阵已经在 RREF 时,最重要的阅读问题有三个:

  • 每个变量列都有主元吗?
  • 有没有自由变量?
  • 有没有矛盾行?

例题

先读结构,再做计算

假设你最后得到

[103501−210000].\begin{bmatrix} 1 & 0 & 3 & 5 \\ 0 & 1 & -2 & 1 \\ 0 & 0 & 0 & 0 \end{bmatrix}.

这里第 1、2 列是主元列,但第 3 列不是,所以第三个变量是自由变量。

因此,这个系统不是唯一解。它会有无限多解,因为你可以先自由选 第三个变量,再回头求出另外两个主元变量。

定理

矛盾行代表什么?

如果行化简后出现

[0001],\begin{bmatrix} 0 & 0 & 0 & 1 \end{bmatrix},

它对应的方程就是 0=10 = 1。这不可能成立,所以原方程组不相容,也就 是无解。

例题

矩阵几乎是 RREF 时

有时矩阵已经很接近 RREF,只差某个主元列还没有清干净。例如

[13012400110−1000013000000]\begin{bmatrix} 1 & 3 & 0 & 1 & 2 & 4 \\ 0 & 0 & 1 & 1 & 0 & -1 \\ 0 & 0 & 0 & 0 & 1 & 3 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}

还不是 RREF,因为第 55 列的主元上方仍有一个 22。只要做

R1←R1−2R3R_1\leftarrow R_1-2R_3

就得到

[13010−200110−1000013000000].\begin{bmatrix} 1 & 3 & 0 & 1 & 0 & -2 \\ 0 & 0 & 1 & 1 & 0 & -1 \\ 0 & 0 & 0 & 0 & 1 & 3 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}.

现在各主元列已经清干净,所以矩阵在 RREF。自由变量是 x2x_2 和 x4x_4;若令 x2=sx_2=s、x4=tx_4=t,则解为

x=[−20−103]+s[−31000]+t[−10−110].x= \begin{bmatrix} -2\\0\\-1\\0\\3 \end{bmatrix} +s \begin{bmatrix} -3\\1\\0\\0\\0 \end{bmatrix} +t \begin{bmatrix} -1\\0\\-1\\1\\0 \end{bmatrix}.

跳过一列也是数学信息

例题

第一列为零,算法仍能正常结束

把最后一列看作常数列,考虑三个未知量的系统:

[02460033].\left[\begin{array}{ccc|c}0&2&4&6\\0&0&3&3\end{array}\right].

第一列全零,因此主元从第二列开始。分别把两行的主元缩放成一,然后清除第二个主元上方的元素:

[01230011]→R1←R1−2R2[01010011].\left[\begin{array}{ccc|c}0&1&2&3\\0&0&1&1\end{array}\right] \xrightarrow{R_1\leftarrow R_1-2R_2} \left[\begin{array}{ccc|c}0&1&0&1\\0&0&1&1\end{array}\right].

结果给出 x2=1x_2=1、x3=1x_3=1,却没有限制 x1x_1。所以所有解为 (t,1,1)(t,1,1),其中 t∈Rt\in\mathbb R。代回原来的两行,得到 2+4=62+4=6 和 3=33=3,都与参数无关。跳过第一列并没有遗漏方程或丢失条件,因为这个变量从一开始就没有出现在任何方程中。

这个例子也说明主元不必在主对角线上。阶梯形由每行首个非零元素的位置决定,并不要求第一行一定从第一列开始。在较大的矩阵中,两个相邻主元之间也可以隔着多个非主元列。

处理增广矩阵时,变量列和常数列必须分清。最后一列出现主元,代表的是矛盾,而不是多了一个可求出的变量。因此要先检查一致性,之后才能把非主元系数列解释为可任意指定的解坐标。非主元列也不一定全零:其中的元素可以记录自由变量怎样影响多个主变量。

例如,前面结构例子中含有系数三和负二的列虽然不是零列,却仍然没有主元。相应变量可以自由选值,但主变量要随之调整。“自由”是说它可以作为独立选择,不是说它对其他方程没有影响。

不重算整题,也能分层检查

检查每个箭头时,先核对目标位置是否按计划改变,再核对整条受影响的行,特别是最后一列。随后检查所宣称的形式:REF 要满足阶梯条件并把全零行放在底部;RREF 还要有单位主元和干净的主元列。两类检查针对不同错误。算术完全正确也可能尚未达到 RREF;外观看起来正确的矩阵,也可能来自错误运算。

最后把参数表达式代回化简后的方程。既然每一步都可逆,同一表达式也满足原系统。把自由参数全设成零只能检查一个特殊解;完整检查要保留参数,并核对各参数的系数。否则,方向向量里的负号错误可能被一个恰好正确的特殊解掩盖。

常见错误

常见错误

REF 不等于 RREF

很多人只要看到主元下面全是 00 就停手。那样可能已经足够做回代,但 还没有到 RREF。RREF 要求主元所在的列,其他位置也全部是 00。

常见错误

做操作时没有明确目标

不要因为“好像要减一下”就随便做行变换。每一步之前,先把目的说清 楚:

  • 你现在用的是哪个主元?
  • 你想消去哪一个元素?
  • 为什么这一步是最自然的下一步?

这个习惯会让你的计算更稳定,也更容易检查符号错误。

快速检查

思考检查

什么情况下应该先换行,再继续消元?

想一想当前的主元位置。如果那个位置是 00,但同一列更下面有非零元 素,会怎样处理?

解答 · 答案

当当前的主元位置不能用,例如它是 00,但同一列下面有非零元素时, 就应该先换行,把可用的主元移上来,然后再继续消元。

思考检查

[0001]\left[\begin{array}{ccc|c}0&0&0&1\end{array}\right] 是一行无害的数据吗?

先把它翻译回一条方程,再决定答案。

解答 · 答案

不是。它代表 0=10 = 1,是矛盾,所以方程组不相容,也就是无解。

思考检查

在上面的长消元例子中,为什么 x2x_2、x4x_4、x6x_6 是自由变量?

看最后的 RREF C′C'。哪些变量列含有首 1?

解答 · 答案

首 1 位于第 11、33、55 列。因此第 22、44、66 列没有主元, 所以 x2x_2、x4x_4、x6x_6 是自由变量。

练习

练习 1

由

[112323580112]\begin{bmatrix} 1 & 1 & 2 & 3 \\ 2 & 3 & 5 & 8 \\ 0 & 1 & 1 & 2 \end{bmatrix}

开始,如果你的目标是清掉第一个主元下面的元素,最自然的第一步行变 换是什么?

解答 · 练习 1 引导解答

第一个主元已经是第 1 行第 1 列的 11。它下面的元素是 22,所以最自 然的做法是

R2←R2−2R1.R_2 \leftarrow R_2 - 2R_1.

这一步可以一次把第 1 列主元下方的元素清掉。

练习 2

考虑矩阵

[102401−130000].\left[\begin{array}{ccc|c} 1 & 0 & 2 & 4 \\ 0 & 1 & -1 & 3 \\ 0 & 0 & 0 & 0 \end{array}\right].

它代表的系统有唯一解、无限多解,还是无解?

解答 · 练习 2 引导解答

这里没有矛盾行,所以不是无解。但第 3 列没有主元,因此存在自由变 量。只要有自由变量,解就不是唯一,而是无限多解。

练习 3

由

[13012400110−1000013000000]\begin{bmatrix} 1 & 3 & 0 & 1 & 2 & 4 \\ 0 & 0 & 1 & 1 & 0 & -1 \\ 0 & 0 & 0 & 0 & 1 & 3 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}

开始,哪一个单步行变换可以把它化成 RREF?

解答 · 练习 3 引导解答

第 55 列的主元是第 3 行的 11。同一主元列中唯一还没有清掉的非零 元素,是第 1 行的 22,所以应该从第 1 行减去两倍第 3 行:

R1←R1−2R3.R_1\leftarrow R_1-2R_3.

练习 4

对于 RREF

[1201021001−10−15000011−30000000],\left[\begin{array}{cccccc|c} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 0 & 0 & 1 & -1 & 0 & -1 & 5 \\ 0 & 0 & 0 & 0 & 1 & 1 & -3 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{array}\right],

令 x2=ux_2=u、x4=vx_4=v、x6=wx_6=w。把 x1x_1、x3x_3、x5x_5 写成 uu、 vv、ww 的式子。

解答 · 练习 4 引导解答

读出三条非零行:

x1+2u+v+2w=1,x3−v−w=5,x5+w=−3.\begin{aligned} x_1+2u+v+2w &= 1,\\ x_3-v-w &= 5,\\ x_5+w &= -3. \end{aligned}

因此

x1=1−2u−v−2w,x3=5+v+w,x5=−3−w.x_1=1-2u-v-2w,\qquad x_3=5+v+w,\qquad x_5=-3-w.

先读这一页

这一页直接建立在 2.2 增广矩阵与行变换 之上。如果你对“为什么行变换不会改变解集”仍然觉得不稳,请先回去 重读那一页,再练这里的长消元路径。

练习

先自行作答,再检查答案。你可以修改后重试。

加载中…

本单元重点词汇