← 返回知识卡片总目录

DS1号 · 自学教材系列 | 线性代数

第 6 章 线性方程组与高斯消元

第 3 章我们学会了把方程组写成矩阵,第 5 章理解了矩阵是「动作」。现在合起来解决最初的问题:如何系统地、不靠灵感地解出任何线性方程组?答案是两百年前高斯发明的高斯消元法——一套在矩阵上「做三种合法操作」的机械流程。

🎯 本章学习目标

  1. 掌握三种初等行变换,并理解为什么它们不改变解集。
  2. 理解「行阶梯形」:主元逐行右移,消元的目标形态。
  3. 能用高斯消元把增广矩阵化为行阶梯形,再回代求全部解。
  4. 分清解的三类结果:唯一解、无穷多解、无解。
  5. 会把工程问题(如电路节点电压)翻译成线性方程组并求解。
  6. 理解「加减消元优先于代入消元」的数值考量:能少除就少除。

6.1三种初等行变换:合法的「等价变形」

解方程组的老办法,是「等式两边同加同减」。比如两式相加、某式乘个倍数。这些操作有个共同点:它们把方程组变成另一个方程组,但解一模一样。

翻译成矩阵的语言,就是三种 初等行变换:

三种初等行变换
操作矩阵动作为什么解不变
交换两行第 i 行 ↔ 第 j 行方程顺序无关紧要
某行乘以非零数 k第 i 行 × k(k≠0)等式两边同乘非零数,等价
某行加上另一行的 k 倍第 i 行 += k×第 j 行把一个等式代入另一个,等价

核心思想 初等行变换 = 方程组的等价变形,每一步都不丢解、不多解。高斯消元,就是用这三招把矩阵「收拾整齐」,让解一目了然。

关键要记住:乘以非零数——乘 0 会把整行抹成 0,丢掉信息,是不允许的。

「某行加另一行的 k 倍」为什么严格合法?两行各是一个等式:E₁ 说 a = b,E₂ 说 c = d。同时满足 E₁、E₂ 的任何 x,必然也满足「c − k·a = d − k·b」(等式两边各减去相等的量);反过来,满足新组合式的 x,加上 k 倍 E₁ 也回到 E₂。所以新旧方程组解集完全相同——这正是中学「代入消元」的矩阵版,只是中学老师没把它写成一招一式的表格。整章的地基只有这一段论证,其余全是流程。

一个自然的疑问:中学明明教过「代入消元」——把 y 从第一式解出来代进第二式——为什么课程和软件都偏爱「加减消元」?看两个毛病:其一,代入要先做除法(解出 y = …/a),分母小、系数带噪声时除法把误差放大,连锁代入几轮,数字就开始「漂」;其二,代入产生越来越长的分式,式子难看、抄写易错。加减消元只做「乘数 + 相减」,从头到尾可以不除一次(最后回代才除),数值上稳得多。这是「算法品味」的一课:能少除就少除——它将在数值计算课上反复得到印证。

工程世界的方程组从哪来?三个主要来源值得认识:物理定律——基尔霍夫电流定律逐节点写「流入 = 流出」,一个节点一个方程(例题 7 马上示范);平衡条件——结构每个节点受力平衡、每个闭合回路压降为零,方程随约束自然生长;约束与配比——配料表、调度表、预算表里「总量固定、比例给定」的每一条都是一个线性方程。可以说:只要系统是「线性」的(第 5 章的意义),描述它的语言天然就是方程组。

先给本章定位。前三章的主线是「正问题」:知道变换(矩阵),问向量被送到哪——A·v 一乘就出。本章反过来,是「反问题」:知道结果 b,问哪个向量 x 经变换后恰好落在 b 上——写成矩阵语言就是 A·x = b,解方程组就是求这个 x。工程里反问题才是日常:已知各节点的电流平衡关系,求各节点电压;已知结构的受力平衡,求各杆内力;已知混合物的谱线强度,求各组分含量——全是「由果索因」。而高斯消元,是人类找到的第一个机械、可复制、不靠灵感的反问题求解法。

再补一层结构:三种变换不但保解,还个个可逆——交换两行,再换一次就复原;某行乘 k(k≠0),再乘 1/k 就复原;某行加 k 倍另一行,再减 k 倍就复原。消元走下的每一步,都有原路返回的「回程票」。这不只是顺口的哲学——第 8 章讲逆矩阵时你会看到:每种行变换本身就是一个矩阵(初等矩阵),行变换可逆,等于说这些矩阵都有逆。消元的「可撤销性」,正是「可逆」观念的种子。

📐 例题 1 给行变换买一张「回程票」

增广矩阵 [[2, 4 | 10],[6, 13 | 31]] 的第二行经过「第 2 行减 3 倍第 1 行」。(1) 写出变形后的矩阵;(2) 找到这一步的「回程票」并执行,验证能原样复原。

思路 老实执行去程,再看「加 3 倍」能否把「减 3 倍」抵消掉。

解 (1) 第 2 行减 3 倍第 1 行:[6−3×2, 13−3×4 | 31−3×10] = [0, 1 | 1],变形后为 [[2, 4 | 10],[0, 1 | 1]]。(2) 回程票是「第 2 行加 3 倍第 1 行」:[0+3×2, 1+3×4 | 1+3×10] = [6, 13 | 31],矩阵分毫不差地回到原样。

答:去程「减 3 倍」,回程「加 3 倍」,一去一回恰好相消。 ⚠ 易错点:三类变换的回程票各不相同——交换的回程是「再交换一次」,乘 k 的回程是乘 1/k(k≠0 这个条件就是为回程票准备的),加减 k 倍的回程是反号再来一遍。背成口诀:「怎么来的,怎么退回去」。

为什么工程师敢把安全攸关的计算交给消元?因为它每一步都可审计:三招白纸黑字,操作序列记录下来,任何人都能逐步复算;每步等价变形,数学上保证不丢解、不多解。对比「灵感式解法」——某处加某式、某处顺手代入,步骤不成体系,漏一个解都察觉不到——机械性不是笨,是可靠。工程计算规范要求关键计算「双人独立复算」,而独立复算能成立的前提,恰恰是算法步骤机械可复制:两人走同一条路,才谈得上互相验证。

顺带一提历史:系统化的消元术比高斯早得多——中国古代《九章算术》的「方程」章已在用筹算布列并消去多元线性方程组,高斯(19 世纪初)的贡献是把它与最小二乘结合、发展成可大规模计算的方法,而真正让消元「统治」数值计算的,是 20 世纪计算机的出现:2n³/3 的计算量对人手是灾难,对机器只是毫秒。方法不变,工具换了人间。

再埋一颗种子:第 5 章说过「矩阵是动作」,本章的三种行变换其实个个都是矩阵动作——「交换两行」「某行乘 k」「某行加 k 倍另一行」都等价于左乘一张特殊的小矩阵(初等矩阵)。于是「对 A 做一串行变换」=「左乘一串初等矩阵」,整场消元就是一个连乘的过程——这份视角在第 8 章会变成求逆矩阵与 LU 分解的标准做法。现在不必展开,只要记住:行变换没有一丝「随意」,每一步都是严格的矩阵乘法。

6.2目标形态:行阶梯形

消元要「收拾」成什么样子?答案是 行阶梯形(row echelon form):

行阶梯形 行阶梯形矩阵,主元用圆圈标出,逐行向右下角延伸,像台阶。 ■ * * 0 ■ * 0 0 ■ 主元逐行右移 下方是 0 像台阶
图 6-1行阶梯形:主元(■)逐行向右,主元下方全是 0,形状像下行的台阶。

为什么追求这个形态?因为一旦变成阶梯形,最底下的方程就只剩一个未知数,能直接解出;再逐层代回,全部未知数依次揭晓。

把「主元」的配套概念配齐。主元所在的列叫主元列,它对应的未知数是「被管住」的;既没有主元、又不出现在矛盾行里的列叫自由列,对应的未知数叫自由变量——没有哪个方程专门约束它,它可以自由取值,每取一个值就得到解族里的一个成员。判读一个阶梯形,按固定流程四步走:① 每行找主元;② 数主元个数,记作 r;③ 找出哪些列没有主元(自由列);④ 检查有没有「系数全零、右端非零」的矛盾行。四步做完,解属于哪一类、自由度几个,全部读出。

两个易错点值得单拎出来。其一,主元必须是非零数,且是「本行第一个非零」——找主元时从左往右扫,碰到第一个非零就停下,别跳过它去找「更好看的数」。其二,某列全是 0 怎么办?这说明该变量在所有方程里都恰好消平或从不出现——跳过这一列、下移一行,继续在右边的列找主元。「逐列推进,卡住就跳」是消元循环的标准节奏;天然的全零列就是自由列。

全零行与全零列的工程含义值得点破。全零行 [0 0 … 0 | 0] 对应「0 = 0」——一个方程被其他方程完全代表,是冗余测量:三支温度计测同一个舱温,第三支的读数必能由前两支推出,消元后必然沉底成零行。全零列对应某个变量在所有方程里都不出现——模型里放了一个「没人管」的自由参数。于是主元个数 r 的工程翻译是:r = 真正独立的约束个数;测量做得再多,有效信息只有 r 条,剩下全是冗余。

一个值得提前知道的辨析:同一矩阵走不同消元路径(先消哪列、用哪个主元),得到的阶梯形可以长得不一样——但主元个数 r 必定相同。这个「殊途同归」不是巧合,第 8 章的秩理论会严格证明:r 由矩阵本身决定,与路径无关。所以在汇报「消元结果」时,靠得住的定量信息是 r、自由列位置、矛盾行有无——这三样与路径无关;至于具体数字长相,不必强求一致。想要完全唯一,得化到 RREF(第 6.4 节末尾提过的「完全体」)。

把「主元逐行右移」说严格:下一行的主元必须落在上一行主元的右边一列或更右——只右移一格是允许的,跳过几列(中间出现自由列)也是允许的;但绝不允许出现在正下方或左方。检查阶梯形是否合格,就用这一条:从上往下画一条穿过所有主元的折线,它必须一路向右下方走,绝不回头。

阶梯形的「台阶」还有一层直觉:第 t 行的主元落在第几列,就意味着这一行「从第几个未知数开始管起」——它左边的未知数已在更上面的行里被管完。所以越往下走,行越「短」,管的事越少;最底行往往只剩一句「z = 多少」。阶梯的形状,就是「责任逐层移交」的形状:上层管 x,中层管 y,底层管 z,谁也不越权、谁也不失职。

把 3×3 增广矩阵消元后常见的「四张脸」列出来,练成一眼判读:第一张脸 [[1,*,*|*],[0,1,*|*],[0,0,1|*]]——主元满配,唯一解;第二张脸 [[1,*,*|*],[0,1,*|*],[0,0,0|0]]——末行冗余、z 列无主元,无穷解;第三张脸 [[1,*,*|*],[0,0,1|*],[0,0,0|0]]——y 自由、z 被管住,无穷解(自由变量未必是最后一个!);第四张脸 [[1,*,*|*],[0,1,*|*],[0,0,0|非零]]——矛盾行压轴,无解。四张脸扫一眼就能报出结论,比逐个方程试解快一个数量级。

做个 2×3 的判读小练(3 个未知数 x、y、z):阶梯形 [[1, 2, 3 | 4],[0, 0, 1 | 5]]。判读:主元在第 1、3 列,r = 2 < 3;第 2 列(y)自由、无矛盾行 → 无穷解。回代:z = 5;x + 2y + 3×5 = 4 → x = −11 − 2y;通解 (−11 − 2t, t, 5)。抽验 t = 3:(−17, 3, 5),代回:−17 + 6 + 15 = 4 ✓、z = 5 ✓。判读流程走熟了,这类题读两行就能报答案。

判读还有一条容易忽略的纪律:右端列永远不充当主元、不算自由列。找主元、数 r、找自由列,全部只在竖线左边的系数部分进行;右端列唯一的戏份,就是在「系数全零」的行里验明正身——零,是冗余;非零,是矛盾。初学者常把右端也数进「列」里,r 与自由度立刻全错;判读前先用竖线把两个世界隔干净。

顺带说清「主元化 1」:把主元除成 1 不是阶梯形的硬性要求——主元是 2 的 [0, 0, 2 | 6] 一样是合法阶梯形;化 1 只是为了回代时少做除法、数字更好看,属于「顺手优化」。判断是否阶梯形,只看三条硬指标:主元非零、逐行右移、零行沉底——与主元是不是 1 无关。考试里别把「没化 1」误判为「不是阶梯形」。

6.3完整流程:高斯消元

用一个例子走一遍全程。解方程组:

2x + y = 4
x − y = 1

第一步,写成增广矩阵:

[[2, 1 | 4], [1, −1 | 1]]

第二步,把第一行第一列的位置(左上角)变成主元,并把它下方的元素消成 0。这里先交换两行,让左上角是较小的 1(这一步可省略,但能让数更整):

高斯消元过程 增广矩阵经过交换行、第二行减两倍第一行、第二行除三,化为行阶梯形。 2 1 4 1 −1 1 —交换— 1 −1 1 2 1 4 R2−2R1 1 −1 1 0 3 2 R2/3 1 −1 1 0 1 2/3 每一步都是等价变形,解集不变
图 6-2高斯消元三步:交换行 → 第二行减 2 倍第一行(消掉左下的 2)→ 第二行除以 3(主元化 1)。

现在矩阵已经变成了行阶梯形,对应方程组:

x − y = 1
y = 2/3

2×2 热身之后,来真的。下面三道例题共用同一套流程,右端项逐个改动,把「唯一解、无穷解、无解」三种结局一次看全。

📐 例题 2 3×3 完整消元:唯一解

解方程组:x + y + z = 6,x + 2y + 3z = 14,2x + y + 2z = 10。

思路 写增广矩阵 → 逐列消元 → 阶梯形 → 回代。左上角已是 1,直接作主元清下方。

解 增广 [[1, 1, 1 | 6],[1, 2, 3 | 14],[2, 1, 2 | 10]]。第 2 行减第 1 行:[0, 1, 2 | 8];第 3 行减 2 倍第 1 行:[0, −1, 0 | −2];第 3 行加第 2 行:[0, 0, 2 | 6]。得阶梯形 [[1, 1, 1 | 6],[0, 1, 2 | 8],[0, 0, 2 | 6]]:主元 3 个、无自由列、无矛盾行——唯一解。回代:2z = 6 得 z = 3;y + 2×3 = 8 得 y = 2;x + 2 + 3 = 6 得 x = 1。

答:唯一解 (x, y, z) = (1, 2, 3)。 ⚠ 易错点:回代必须从最底行往上,每行只解一个新未知数;最底行是 2z = 6,主元是 2——z = 3,别把 z 抄成 6。收尾别省:把 (1,2,3) 代回三个原方程逐个核对(6、14、10 全中),算完必验。

📐 例题 3 3×3 完整消元:无穷多解

解方程组:x + y + z = 6,x + 2y + 3z = 14,2x + 3y + 4z = 20。

思路 与例题 2 只差第三个方程。同一套流程,重点观察第三行被前两行「吃掉」的过程。

解 增广 [[1, 1, 1 | 6],[1, 2, 3 | 14],[2, 3, 4 | 20]]。第 2 行减第 1 行:[0, 1, 2 | 8];第 3 行减 2 倍第 1 行:[0, 1, 2 | 8];第 3 行再减第 2 行:[0, 0, 0 | 0]——第三个方程恰好是前两个之和,冗余沉底。阶梯形 [[1, 1, 1 | 6],[0, 1, 2 | 8],[0, 0, 0 | 0]]:主元 2 个 < 未知数 3 个,z 列没有主元 → z 是自由变量。令 z = t:y = 8 − 2t;x = 6 − y − z = 6 − (8 − 2t) − t = t − 2。

答:无穷多解,通解 (x, y, z) = (t − 2, 8 − 2t, t),t 任取实数。抽验:t = 0 得 (−2, 8, 0),三式全中;t = 3 得 (1, 2, 3),也全中——例题 2 的解躺在这族解里,因为前两个方程与例题 2 完全相同。 ⚠ 易错点:通解写法不唯一(令 y 自由会得到另一副模样的解族),对不对的标准只有一条——代回原方程组全部成立。

📐 例题 4 3×3 完整消元:无解

解方程组:x + y + z = 6,x + 2y + 3z = 14,2x + 3y + 4z = 21。

思路 与例题 3 只差一个数字:右端 20 改成 21。一行之差,看结局如何翻转。

解 增广 [[1, 1, 1 | 6],[1, 2, 3 | 14],[2, 3, 4 | 21]]。第 2 行减第 1 行:[0, 1, 2 | 8];第 3 行减 2 倍第 1 行:[0, 1, 2 | 9];第 3 行减第 2 行:[0, 0, 0 | 1]。最后一行读作 0 = 1——矛盾行现身:无论 x、y、z 取什么值,都满足不了它。

答:无解。几何画面:例题 3 的三个平面本交于一条直线;把第三个平面沿自身法向平移 1 个单位,它与那条直线「擦肩而过」——交不上,就是无解。 ⚠ 易错点:[0, 0, 0 | 0] 是冗余(无穷解的信号),[0, 0, 0 | 非零] 才是矛盾(无解的信号)——右端零与非零一字之差,结局两分。

三道例题共用一套流程,这正说明消元的本质是算法:定当前主元 → 下方清零 → 换下一列,循环到底。它不挑题、不需要灵感、步骤可长可短,自然可以交给计算机。数值计算领域还有一个实用的补充:实际程序会在当前列挑绝对值最大的元素换上来当主元(换行实现),以抑制舍入误差被小数除法放大——这套技术叫「列主元法」。手算不必纠结选法,但要知道机器一直在替你操心误差。

两条实战纪律,初学者九成的事故出在这里。纪律一:右端列必须跟着一起变形——行变换作用的对象是「整行」,系数和右端一起加减;只改系数忘改右端,是消元事故的头号来源。纪律二:解出必代回——把解代回的是最初抄写的原始方程组,而不是阶梯形(阶梯形是等价变形,理论上也能验,但代回原始才顺便查出了「抄写错」这类流程事故)。

📐 例题 5 主元为零:换行的必要性

解方程组:y = 2,x − y = 0。

思路 增广 [[0, 1 | 2],[1, −1 | 0]] 的左上角是 0——第一列的主元候选是零,乘数没法开工。此路不通,换一条:交换两行。

解 交换两行得 [[1, −1 | 0],[0, 1 | 2]]——恰已是阶梯形:主元在第 1、2 列,无自由列、无矛盾行,唯一解。回代:y = 2;x − 2 = 0 → x = 2。

答:唯一解 (x, y) = (2, 2)。验算:0×2 + 2 = 2 ✓,2 − 2 = 0 ✓。 ⚠ 易错点:遇到左上角为 0,唯一合法的解法是「在同列下方找非零元换上来」;若整列皆零,则跳列右移——「换行」和「跳列」是两招不同的救场动作,别混。

把「主元为零」的应对整理成两难决策树:当前主元位置是 0 → 往下看这一列:下方有非零 → 换行;下方也全是 0 → 跳列(本列作自由列,下移一行继续)。两种救场都不改变解集,因为它们本身就是合法的行变换(换行)或「不动」(跳列只是不操作)。这套决策写进程序就是消元循环的核心 if-else。

📐 例题 6 顺手就位的阶梯:同一解、不同长相

解方程组:x + y + z = 6,y + z = 5,x + 2y + 3z = 14。

思路 本题主元会自然就位,无需换行;重点看「消元次序不同、终点殊途同归」。

解 增广 [[1, 1, 1 | 6],[0, 1, 1 | 5],[1, 2, 3 | 14]]。第 3 行减第 1 行:[0, 1, 2 | 8];第 3 行减第 2 行:[0, 0, 1 | 3];第 2 行减第 3 行:[0, 1, 0 | 2]。阶梯形 [[1, 1, 1 | 6],[0, 1, 0 | 2],[0, 0, 1 | 3]]——三个主元沿对角线就位,且后两行已经干净到可以直接读:y = 2、z = 3;回代 x = 6 − 2 − 3 = 1。

答:唯一解 (1, 2, 3)——与例题 2 同解。原方程组其实与例题 2 等价(第三式减第一式就是第二式的一个变形),两套方程、一个解集、两条消元路径,殊途同归。 ⚠ 易错点:「第 2 行减第 3 行」这一步把主元 1 上方的 1 顺手清掉了——这是朝着 RREF 走的清理动作,合法且省事;但它不是阶梯形的必需步骤,属于「顺手为之」。

到这一步,把完整流程复盘成一张口诀单:抄(原方程逐字抄进增广矩阵)→ 扫(逐列找主元,零就换行或跳列)→ 清(主元下方清零,右端跟着动)→ 读(四步判读:主元、r、自由列、矛盾行)→ 代(自底向上回代)→ 验(代回原始方程组)。六个字都做到,任何线性方程组都逃不出你的手掌心。

替例题 2 记一笔「步数账」:整个消元共用了 3 次倍加变换(第 2 行减第 1 行、第 3 行减 2 倍第 1 行、第 3 行加第 2 行)、0 次换行、0 次倍乘——3×3 的典型量级。一般地,n 个未知数的满配消元,第 1 列清零要 n−1 步、第 2 列要 n−2 步……加起来约 n(n−1)/2 次倍加,这正是 2n³/3 工作量级在「操作次数」上的影子(每步倍加还要对整行元素逐一相乘)。数步数不是闲账:它让你对「规模翻倍、代价翻几倍」有体感——n 从 3 涨到 6,操作数翻约 4 倍不止。

🧠 一句话记忆 消元的节奏:「先定主元,再把主元下方全部清零,逐列推进」,直到变阶梯。

6.4回代:从下往上求出解

行阶梯形已经把最难的「多个未知数纠缠」拆开了。现在从最下面的方程开始往上代:

  1. 最下面:y = 2/3,直接得到 y;
  2. 代回上面:x − (2/3) = 1,解得 x = 5/3。

于是唯一解:x = 5/3,y = 2/3。和第 3 章开头手算的结果完全一致——但这一次,整个过程机械、可复制、不靠灵感,再多未知数也能照做。

这一步叫 回代(back substitution):阶梯形从下往上,一次只解一个未知数。

回代有个工程别名要认识:对阶梯形(数值圈叫它「上三角系统」)做的这套自底向上求解,软件文档里常叫后向替换(backward substitution)——消元把它做成「上三角」,后向替换负责收尾。顺带留意:若系数矩阵一上来就是上三角(下一章行列式里会偶遇这种「好命矩阵」),消元量直接为零、只剩回代——「把消元成果存起来反复复用」正是这套观察的终点站(顺带记全一对:若系数矩阵已经是下三角,自顶向下依次解,就叫前代——两个词成对出现,你会在数值方法的文档里反复遇到)。回代的方向藏着一个结构性原因:阶梯形每一行都比上一行「少管一个」未知数——最底行管得最少(常常只剩一个),越往上牵扯越多。从底下开始,每一步都只是一元一次方程;若从顶上开始,第一行就同时含着 x、y、z,无从下手。所以「自底向上」不是习惯偏好,是唯一可行的方向——阶梯形的形状决定了回代的路线,这正是「先消元、后回代」分工的几何意义。

再算一笔工作量的账:n 个未知数的消元约需 2n³/3 次乘加,回代只要约 n² 次——消元是贵的大头,回代是便宜的小尾巴。工程里最常见的工况是同一套系数、多个右端:同一结构承受多种载荷、同一电路施加多组激励。聪明的做法是「一次消元、多次回代」:系数矩阵的消元只做一遍(贵,但只贵一次),每个工况只跑一遍廉价的回代。结构分析软件对几百种载荷工况能瞬间出结果,靠的就是这份「消元共享」——这背后隐含一个事实:消元只作用于系数部分,右端列只是被动跟着变形,换右端不推翻消元成果。

顺带认识消元的「完全体」:把每个主元化成 1、再把主元上方的元素也清零,得到的形态叫简化行阶梯形(RREF)。到这一步连回代都省了——解直接摆在矩阵里。代价是额外的清理工作。工程权衡:解一个方程组,普通阶梯形 + 回代总体更快;需要反复「直接读解」的场合,才值得一步到位化成 RREF。例题 6 顺手动了一下「清上方」的动作,已经尝到甜头:后两行直接读出 y、z——这正是朝 RREF 方向的顺手清理。要不要清到底,看用途:解一个方程组,阶梯 + 回代最经济;要反复读解、或要证明结构性的结论(比如自由变量的位置),RREF 一步到位更省心。

把消元与回代的计算量放进具体数字里感受一下(以乘加次数计):n = 10 时,消元约 667 次、回代约 100 次,7:1;n = 100 时,约 66.7 万次对 1 万次,67:1;n = 1000 时,约 6.67 亿次对 100 万次,667:1——规模越大,消元越是大头中的大头。「一次消元、多次回代」的价值随规模指数式放大:千阶系数矩阵消一次元,之后每种工况只需百万次量级的回代,瞬间完成。

「换右端不推翻消元」的原理也值得说透:行变换作用在整行(含右端),但每一步的乘数 k 由系数部分的比值决定——只要系数矩阵不变,消元序列的所有乘数就都不变;换一组右端,只是让右端列「搭乘同一班列车」走完同样的变形路线。所以换工况时,系数矩阵的消元成果(连同全部乘数记录)原封不动复用,只重演右端那一列的加减。工程软件存的就是这份「消元档案」。

为什么高斯消元厉害 它把一个「n 个未知数搅在一起」的难题,拆成「一步步只解一个」的流水线。这正是算法的力量:把复杂问题分解成重复的简单步骤——计算机最擅长的事。

变体预告:高斯-若尔当消元,把回代也免了 高斯消元停在阶梯形,把「读解」留给回代;若尔当(Gauss-Jordan)再多走一步:把每个主元化成 1,再把主元上下的系数统统清零,最后增广矩阵的最右列直接就是解——解从「回代算出来」变成「当场读出来」。代价是乘除法次数大约多出一半,解大型方程组时工程软件通常舍不得;但它有一个高斯替代不了的高光岗位:把 [A | I] 一路消成 [I | A⁻¹],机器求逆矩阵的标准流水线正是它(第 8 章)。两条路线怎么选?只解一次方程、规模又大,选高斯——省算力;求逆矩阵、或规模小到不在乎一半开销,选若尔当——省心。这类「省算力还是省心」的取舍,工程里天天都在做。

6.5解的三类结果

不是所有方程组都有唯一解。消元到最后,阶梯形会「透露」答案属于哪一类:

线性方程组解的三类结果
情形阶梯形的特征结果
唯一解每个未知数都有主元,无矛盾行恰好一组解
无穷多解有「自由变量」(某列没有主元)解是一条线/一个面……
无解出现「0 = 非零」的矛盾行没有解

最容易迷惑的是无解:消元后若出现一行 [0 0 | 5](意思是 0=5),那方程组自相矛盾,无解。而无穷多解来自「未知数比方程多」:有些变量可以自由取值,解就是一条线甚至一个面。

🧠 一句话记忆 看阶梯形:出现「0=非零」→ 无解;有自由列 → 无穷解;主元满配 → 唯一解。

把三类情形合并成一张总账。设未知数 n 个,消元后(若没有矛盾行)数出主元 r 个:r = n,每个未知数都被管住 → 唯一解;r < n,有 n − r 个自由变量 → 无穷多解,解集是 n − r 维的(一条线、一个面……);若出现矛盾行 → 无解,前面数多少主元都救不了它。主元个数 r 这个数字如此要紧,第 8 章会给它专名——秩(rank),并证明它不依赖消元路径:先消哪列、后消哪列,r 都一样。一句话预告:解的个数问题,归根结底是秩的问题。

(a) 唯一解:交于一点 唯一交点 (b) 无穷解:共交一线 公共交线 (c) 无解:互不相交 两平面平行 第三者插不进同一点
图 6-3三平面、三种结局:交于一点(唯一解)、共交一线(无穷解,例题 3 的解是一条直线)、互不相交(无解,例题 4 把平面平移了 1 个单位)。

📐 例题 7 工程实战:电路节点方程

两节点电路:10V 电压源经 1Ω 电阻接节点 V₁;V₁ 经 1Ω 电阻接节点 V₂;V₂ 经 0.5Ω 电阻接地。对每个节点列基尔霍夫电流方程(流入 = 流出),并解出 V₁、V₂。

思路 每条支路电流 = 电导 × 电压差(欧姆定律),对每个节点把「流出的电流」加成零。节点电压法天然产出线性方程组——电气工程师每天都在写的 Ax = b。

解 节点 V₁:(10 − V₁)/1 = (V₁ − V₂)/1,两边乘 1 移项合并:2V₁ − V₂ = 10。节点 V₂:(V₁ − V₂)/1 = V₂/0.5,整理:−V₁ + 3V₂ = 0。增广 [[2, −1 | 10],[−1, 3 | 0]]。第 2 行加 ½ 倍第 1 行:[0, 5/2 | 5]——阶梯形到手。回代:V₂ = 5 ÷ 5/2 = 2;2V₁ = 10 + V₂ = 12 → V₁ = 6。

答:V₁ = 6V,V₂ = 2V。KCL 自检:源到 V₁ 的电流 (10−6)/1 = 4A,V₁ 到 V₂ 的电流 (6−2)/1 = 4A,V₂ 到地 2/0.5 = 4A——同一股 4A 电流依次流过三个电阻,两个节点处进出相抵,电流守恒无一处不闭合。 ⚠ 易错点:列方程时每条支路的电压差方向必须统一(本解一律写「电位高的一端减节点」),写反一个符号,方程组面目全非——方程组忠实得很,喂错就错给你看。

10 V + − 1 Ω V₁ = 6 V 1 Ω V₂ = 2 V 0.5 Ω 4 A 4 A 4 A
图 6-4例题 7 的两节点电路:10V 源经 1Ω 到 V₁,再经 1Ω 到 V₂,最后经 0.5Ω 接地。KCL 在每个节点给出一个方程,电路问题就此变成解方程组问题。

📐 例题 8 阶梯形判读:三连发

不消元,直接判读下面三个已化为阶梯形的增广矩阵(各含 3 个未知数 x, y, z),指出解的类别;有解的写出解或通解。(a) [[1, 2 | 3],[0, 1 | 4]];(b) [[1, 0, 2 | 3],[0, 0, 1 | 4],[0, 0, 0 | 0]];(c) [[1, 1, 1 | 1],[0, 0, 1 | 1],[0, 0, 0 | 1]]。

思路 四步判读:每行找主元 → 数 r → 找自由列 → 查矛盾行。

解 (a) 主元 2 个 = 未知数 2 个,无矛盾行 → 唯一解;回代 y = 4,x + 2×4 = 3 → x = −5。(b) 主元在第 1、3 列,r = 2 < 3;第 2 列(y)没有主元 → y 是自由变量;z = 4,x + 2×4 = 3 → x = −5;通解 (−5, t, 4),t 任意。(c) 第三行 [0, 0, 0 | 1] 是矛盾行 → 无解;前两行长得再正常也无济于事。

答:(a) 唯一解 (−5, 4);(b) 无穷多解,通解 (−5, t, 4);(c) 无解。 ⚠ 易错点:(b) 中主元落在第 1、3 列、第 2 列空缺——自由变量是 y 不是 z;「哪个变量自由」由「哪列没有主元」唯一决定,别按位置顺序想当然地认为最后一个变量自由。

最后看一眼工程现场的真实样貌:方程数与未知数一样多(本章的方阵情形)其实是「理想题」。测量做得充分时,方程常常多于未知数(超定)——各方程因噪声互相打架,精确解不存在,最小二乘给出「最接近全体」的折中解,本课程后段会讲;建模粗糙时,方程少于未知数(欠定)——解不唯一,需要补充约束或优化目标来挑选。先把标准题的判读与求解练扎实,工程变体才有落点。

用「参数个数」给三类解换个说法,工程交流时更好用:唯一解 = 解能用 0 个自由参数写死;无穷解 = 解需要 n − r 个自由参数(例题 3 的解族吃一个参数 t,例题 8(b) 同样吃一个);无解 = 参数再多也无济于事。于是「解的维度」这个抽象词有了操作定义:数一数通解里有几个自由参数。

最后把第 5 章的「动作」视角接回来,你会发现本章全是它的续集。A·x = b 的几何含义是:哪个向量 x 被变换 A 送到 b?唯一解 = b 恰好只有一个原像;无穷解 = b 有许多原像——变换在某个方向上「压扁」了空间,被压扁的方向上整条线的向量都被送到同一点(这就是例题 3 自由变量的来历);无解 = b 落在变换够不着的地方——像空间没铺到那。第 8 章讲秩与像空间时,这三句话会被翻译成严格的定理;而现在,你已经能用消元把每种情形亲手算出来。

带着两个问题预习下一章:行列式——矩阵的「面积缩放倍数」——为零与否,恰好预告这个变换是否压扁空间、A·x = b 是否唯一可解?例题 3 的系数矩阵把三维压成二维「像」,被压扁的方向与解族的方向(自由变量的轴)有什么关系?答案都在「行列式 = 0 ⟺ 压扁」这句判词里。

有一个二分法值得刻进脑子:「有没有解」与「有几个解」是两个独立的问题。前者是存在性——b 是否落在变换够得着的范围里(有没有矛盾行);后者是唯一性——够得着的话,有几条路通向 b(有几个自由变量)。三个格子:有且唯一(例题 2)、有而不唯一(例题 3)、根本无解(例题 4)。工程里这对二分法天天登场:传感器布点能不能唯一确定全部状态(可观测性)、载荷分布能不能被约束唯一平衡(静定与否),本质都是这两个问题。

再把例题 7 的电路往真实世界推一步规模感:节点电压法里每个节点给一个 KCL 方程,N 个节点的电路(参考地除外)列 N − 1 个方程。真实飞机全机电网、大型建筑的配电网络,节点数以千计——上千个未知数的方程组,靠的正是本章的消元法,配上「稀疏矩阵」技术(电路里每个节点只连少数几条支路,系数矩阵绝大多数位置是 0,能跳过的乘加全部跳过)才跑得动。你在例题 7 手解的两个方程,与工程师软件里自动生成的上千个方程,是同一个数学骨架。

给超定与欠定各配一个能心算的数值小例。超定:一支 1Ω 电阻分别用两块表测,x = 2 与 3x = 7 同时成立?消元:第 2 行减 3 倍第 1 行得 [0 | 1]——0 = 1,矛盾,无精确解。最小二乘的折中是让「两式残差平方和」最小,本例算出来 x = (1×2 + 3×7)/(1² + 3²) = 23/10 = 2.3——谁权重大(3x 那式系数大)就多迁就谁。真实测量方程动辄几十个,矛盾几乎必然来自噪声,最小二乘是工程标配。欠定:x + y = 1,一个方程两个未知数——通解 (t, 1 − t),一条不过原点的直线;工程的处理是补充约束(如「x、y 非负」)或加优化目标(如「取范数最小的那个解」)。

最后看一眼无穷解集的结构,为后文留个钩子。例题 3 的通解 (t−2, 8−2t, t) 可以拆成两部分:特解 (−2, 8, 0)(取 t = 0)+ 方向项 t·(1, −2, 1)。特解随便挑哪个都行(例题里 t = 3 挑中的 (1,2,3) 也可以),但方向向量 (1, −2, 1) 是同一个——它正是「被变换压扁的那个方向」。所有解 = 一个特解 + 压扁方向上的任意滑动。注意到一个细节:这族解是一条不过原点的直线(原点 (0,0,0) 不满足方程组),所以解集本身不是子空间;但「方向」部分——全体 t·(1, −2, 1)——是一个过原点的子空间。这个「特解 + 齐次解」的分解结构,第 8 章将升格为定理。

关于「什么时候无解、什么时候无穷解、解到底有几维」,下一章之后还会用「秩」这个概念统一说清。

本章小结

  1. 三种初等行变换(换行、倍乘非零数、某行加另一行的倍数)都是等价变形,不改变解集。
  2. 高斯消元:用行变换把增广矩阵化为行阶梯形(主元逐行右移)。
  3. 化阶梯后回代,从下往上逐个求出未知数。
  4. 解分三类:唯一解(主元满配)、无穷多解(有自由变量)、无解(出现矛盾行)。
  5. 高斯消元的核心价值:把复杂问题分解成机械可复制的简单步骤。
  6. 解集由阶梯形全权决定:主元满配 → 唯一解;有自由列 → 无穷解;出现矛盾行 → 无解——判读只看这三件事,主元个数 r 就是「独立约束个数」。
  7. 「一次消元、多次回代」:同一系数、多种右端的批量求解,把昂贵的消元只做一遍。
  8. 无穷解集 = 特解 + 被压扁方向上的滑动——这条结构是第 8 章「秩与解结构定理」的种子。

读完本章,你应该能……

思考题

1. 为什么「某行加上另一行的 k 倍」不会改变方程组的解?

提示:它等价于把一个等式代入另一个等式,是恒等变形,解集不变。

2. 消元时为什么「某行乘以 0」是禁止的?

提示:乘 0 会把整行抹成 0,丢掉原方程的信息,可能多出解或丢掉解。

3. 若消元后出现一行 [0, 0 | 3],说明什么?

提示:对应方程 0=3,矛盾,方程组无解。

4. 方程组 x+y=1、2x+2y=2 有几组解?为什么?

提示:第二个方程是第一个的 2 倍,实际只有一个独立方程,两个未知数一个方程,有无穷多解(y 可自由取值,x=1−y)。

5. 在例题 3 的通解 (t−2, 8−2t, t) 中取 t = 1,写出这组解并代回三个方程逐个验证。

提示:t=1 得 (−1, 6, 1)。验证:−1+6+1 = 6 ✓;−1+2×6+3×1 = 14 ✓;2×(−1)+3×6+4×1 = 20 ✓,三式全中。

6. 为什么「一次消元、多次回代」能大幅节省计算?什么样的实际问题正好用得上?

提示:消元约 2n³/3 次乘加、回代约 n² 次,消元是大头;换右端不推翻消元成果。同一结构多种载荷工况、同一电路多组激励,都是「同一系数、多个右端」。

7. 判读阶梯形 [[1, 2, 3 | 6],[0, 1, 2 | 8],[0, 0, 0 | 0]]:解属哪一类?写出通解。

提示:主元 r = 2 < 3、无矛盾行 → 无穷多解,z 自由;回代 y = 8−2t,x = t−2,通解 (t−2, 8−2t, t)——这正是例题 3 的阶梯形。

8. 增广 [[0, 1 | 2],[1, −1 | 0]] 的左上角是 0,下一步该做什么?为什么这一步不改变解集?

提示:下方同列有非零元(第二行的 1),交换两行把它换上来当主元——交换行是三种合法行变换之一,只是改变方程排列顺序,解集不变;若整列皆零,则跳列。解为 (2, 2)。

9. n = 1000 时消元约 6.67 亿次乘加、回代约 100 万次。如果同一系数矩阵要解 100 组不同右端,「一次消元、多次回代」比「每组都独立消元」大约省多少工作量?

提示:独立消元 100 次 ≈ 667 亿次;共享消元 ≈ 6.67 亿 + 100×100 万 = 6.77 亿次,约省 98%——规模越大、工况越多,共享越划算。

10. 两个测量方程 x = 2 与 3x = 7 同时声称成立。用消元说明它们矛盾;再用 (1×2 + 3×7)/(1² + 3²) 算出最小二乘折中值。

提示:第 2 行减 3 倍第 1 行得 [0 | 1],0=1 矛盾 → 无精确解;折中 x = (2+21)/10 = 23/10 = 2.3——加权平均,谁系数大迁就谁,这是超定系统的日常处理。

11. 用若尔当路线把增广矩阵 [[2, 4, 6],[1, 3, 7]] 一路化到 [[1, 0, ?],[0, 1, ?]],直接读出解并代回检验。

提示:R₁ → R₁/2 得 [1, 2, 3];R₂ → R₂ − R₁ 得 [0, 1, 4];R₁ → R₁ − 2R₂ 得 [1, 0, −5]。最右列就是解:x = −5、y = 4。检验:2×(−5) + 4×4 = 6 ✓、(−5) + 3×4 = 7 ✓。三步过后答案直接躺在末列,回代这道工序被彻底裁撤——这就是若尔当路线的全部卖点。