输入矩阵,打开分解标签页,点击 RREF(A)。步骤面板会自动展开,用标准 记号列出每一次变换,你可以把过程直接抄进作业本,并找出自己是在哪一步开始算岔的。点行阶梯形(A) 得到普通的高斯消元,点 rank(A) 得到秩——这三者出自同一个 算法,下面就是它。
三种初等行变换
消元是线性代数里最有用的算法。秩、行列式、逆矩阵和线性方程组的解都由它而来。它建立在三种变换之上, 而这三种都不会改变原方程组的解集:
- 交换两行:
R(i) ↔ R(j) - 把某一行乘以非零数:
R(i) → k·R(i) - 把某一行的倍数加到另一行:
R(i) → R(i) + k·R(j)
把某一行乘以零不在这份清单里,也是不允许的:那是把一个方程毁掉,而不是把它改写。
行阶梯形
矩阵处于行阶梯形,是指:
- 全零行都排在最下面;
- 每一行的首个非零元素(主元)严格位于上一行主元的右侧;
- 主元下方全部为零。
| 2 | 1 | −1 |
| 0 | 3 | 2 |
| 0 | 0 | 5 |
简化行阶梯形
简化形更进一步:每个主元都等于 1,并且是所在列里唯一的非零元素。最关键的是,每个矩阵的简化行阶梯形恰好只有一个——结果与你做变换的先后顺序无关。正是这种唯一性, 让它成了核对自己解法的可靠标准。
算法逐步说明
- 从左上角开始。在当前列里找最大的元素——这叫部分选主元,能把舍入误差控制得很小。
- 如果整列都是零,就右移一列重来。
- 把那一行换到主元位置上。
- 把主元行除以主元本身,使主元变成 1。
- 从其余各行中减去主元行的适当倍数,把该列剩下的位置清零。
- 下移一行、右移一列,重复以上步骤。
若第 5 步只作用于主元下方的行,得到的是高斯消元与行阶梯形;把上方也一并清干净,得到的就是 高斯-若尔当消元与简化形。高斯-若尔当算得更多,换来的是解可以直接读出,不必回代。
例题
| 1 | 2 | 1 |
| 2 | 4 | 3 |
| 3 | 6 | 5 |
| 1 | 2 | 0 |
| 0 | 0 | 1 |
| 0 | 0 | 0 |
第二列始终没有主元,所以它对应的变量是自由变量——而那一行零也确认了第三个方程没带来新信息。把这个 形式读回去:秩是 2,以它为系数矩阵的方程组有无穷多解,含一个自由参数。
解线性方程组
把方程组写成增广矩阵输入:每个方程一行,每个未知数一列,最后一列放常数项。三元 一次方程组就是一个 3×4 矩阵。每一次行变换都作用于整行,常数项那一列也不例外。取 x + 2y − z = −4、2x + 3y − z = −11、−2x − 3z = 22:
| 1 | 2 | −1 | −4 |
| 2 | 3 | −1 | −11 |
| −2 | 0 | −3 | 22 |
| 1 | 2 | −1 | −4 |
| 0 | −1 | 1 | −3 |
| 0 | 0 | −1 | 2 |
最后一行说 −z = 2,于是 z = −2。往上回代得到 y = 1,再得 x = −8。三种可能的结局都能从简化形里 读出来:
- 唯一解:系数矩阵的每一列都有主元。
- 无穷多解:某一列没有主元——它对应的变量是自由的。
- 无解:出现一行
0 0 0 | c且c ≠ 0,它断言 0 = c。
秩:数一数留下了多少
矩阵的秩是线性无关的行数——等价地,也是线性无关的列数。这两个数永远相等,这一事实重要到有自己的 名字:行秩等于列秩定理。要算它,把矩阵化简后数非零行即可。行变换从不改变秩,这正是 这个办法奏效的原因。
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 5 | 7 | 9 |
| 1 | 2 | 3 |
| 0 | −3 | −6 |
| 0 | 0 | 0 |
这里第三行恰好等于第一行加第二行,因此没有带来任何新东西,消元把它化成了零。对 m×n 矩阵,秩 ≤ min(m, n);达到这个上界的矩阵称为满秩。对方阵而言,满秩、可逆、行列式非零是同一件事的三种说法。
秩也决定了方程组究竟有没有解。Rouché–Capelli 定理说,Ax = b 有解当且 仅当 rank(A) = rank([A | b]);若这个公共秩等于未知数个数,解唯一,否则就有 n − 秩 个自由参数。与之配套的恒等式是秩-零化度定理:rank(A) + nullity(A) = n。
为什么简化形是唯一的,而行阶梯形不是
同一个矩阵,不同的人做消元,中途出现的行阶梯形往往彼此不同:主元的具体数值取决于你先用了哪一行、乘了 什么倍数。但把主元统一成 1、并把主元上方也清零之后,剩下的自由度就没有了,结果只可能有一个。
这一点在实际使用中很有价值。核对作业时,你和标准答案的行阶梯形不一致,未必说明你错了;但简化形不一致, 就一定有一方算错。同样,主元所在的那些列——也就是所谓的主元列——完全由矩阵本身决定,与消元的路径无关, 这正是秩能被良好定义的原因。
常见错误
- 停在普通行阶梯形。只把每个主元下方清零得到的是行阶梯形,简化形连上方也要清干净。
- 让主元不等于 1。简化形要求把每一行主元行除以它自己的主元。
- 交换列。交换行是允许的;交换列会改变哪个变量是哪个。
- 漏看矛盾行。一行
0 0 0 | c且 c ≠ 0 意味着方程组根本无解。 - 见到零行就说无解。整行为零只是一个多余方程,此时解有无穷多个。只有
0 = c且 c 非零才表示无解。 - 没算完就数非零行。只有消元彻底完成,行与行之间的相关性才会显现。先化到底,再数。