MatrixCalc

简化行阶梯形、高斯消元与秩计算器

把任意矩阵化为简化行阶梯形,并逐条读出每一次初等行变换,写作 R2 → R2 − 3·R1。可解线性方程组并给出秩。

矩阵 A
: 3
: 3
矩阵 B
: 3
: 3
运算

展开下方步骤即可看到完整答案。

结果
选择一个运算以在此处查看结果。错误信息也会显示在这里。

提示:可调整矩阵大小(最多 50×50)。A×B 要求 A 的列数等于 B 的行数。行列式/逆/迹/幂 需要方阵。

React, Tailwind & shadcn/ui. No external math deps. — 中文

输入矩阵,打开分解标签页,点击 RREF(A)。步骤面板会自动展开,用标准 记号列出每一次变换,你可以把过程直接抄进作业本,并找出自己是在哪一步开始算岔的。点行阶梯形(A) 得到普通的高斯消元,点 rank(A) 得到秩——这三者出自同一个 算法,下面就是它。

三种初等行变换

消元是线性代数里最有用的算法。秩、行列式、逆矩阵和线性方程组的解都由它而来。它建立在三种变换之上, 而这三种都不会改变原方程组的解集:

  1. 交换两行:R(i) ↔ R(j)
  2. 把某一行乘以非零数:R(i) → k·R(i)
  3. 把某一行的倍数加到另一行:R(i) → R(i) + k·R(j)

把某一行乘以零不在这份清单里,也是不允许的:那是把一个方程毁掉,而不是把它改写。

行阶梯形

矩阵处于行阶梯形,是指:

  • 全零行都排在最下面;
  • 每一行的首个非零元素(主元)严格位于上一行主元的右侧;
  • 主元下方全部为零。
21−1
032
005

简化行阶梯形

简化形更进一步:每个主元都等于 1,并且是所在列里唯一的非零元素。最关键的是,每个矩阵的简化行阶梯形恰好只有一个——结果与你做变换的先后顺序无关。正是这种唯一性, 让它成了核对自己解法的可靠标准。

算法逐步说明

  1. 从左上角开始。在当前列里找最大的元素——这叫部分选主元,能把舍入误差控制得很小。
  2. 如果整列都是零,就右移一列重来。
  3. 把那一行换到主元位置上。
  4. 把主元行除以主元本身,使主元变成 1。
  5. 从其余各行中减去主元行的适当倍数,把该列剩下的位置清零。
  6. 下移一行、右移一列,重复以上步骤。

若第 5 步只作用于主元下方的行,得到的是高斯消元与行阶梯形;把上方也一并清干净,得到的就是 高斯-若尔当消元与简化形。高斯-若尔当算得更多,换来的是解可以直接读出,不必回代。

例题

121
243
365
120
001
000

第二列始终没有主元,所以它对应的变量是自由变量——而那一行零也确认了第三个方程没带来新信息。把这个 形式读回去:秩是 2,以它为系数矩阵的方程组有无穷多解,含一个自由参数。

解线性方程组

把方程组写成增广矩阵输入:每个方程一行,每个未知数一列,最后一列放常数项。三元 一次方程组就是一个 3×4 矩阵。每一次行变换都作用于整行,常数项那一列也不例外。取 x + 2y − z = −4、2x + 3y − z = −11、−2x − 3z = 22:

12−1−4
23−1−11
−20−322
12−1−4
0−11−3
00−12

最后一行说 −z = 2,于是 z = −2。往上回代得到 y = 1,再得 x = −8。三种可能的结局都能从简化形里 读出来:

  • 唯一解:系数矩阵的每一列都有主元。
  • 无穷多解:某一列没有主元——它对应的变量是自由的。
  • 无解:出现一行 0 0 0 | cc ≠ 0,它断言 0 = c。

秩:数一数留下了多少

矩阵的秩是线性无关的行数——等价地,也是线性无关的列数。这两个数永远相等,这一事实重要到有自己的 名字:行秩等于列秩定理。要算它,把矩阵化简后数非零行即可。行变换从不改变秩,这正是 这个办法奏效的原因。

123
456
579
123
0−3−6
000
秩 = 2

这里第三行恰好等于第一行加第二行,因此没有带来任何新东西,消元把它化成了零。对 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 非零才表示无解。
  • 没算完就数非零行。只有消元彻底完成,行与行之间的相关性才会显现。先化到底,再数。

常见问题

行阶梯形和简化行阶梯形有什么区别?
行阶梯形只要求每个主元下方为零。简化形还要求主元等于 1、主元上方也为零。只有简化形是唯一的。
高斯消元和高斯-若尔当消元有什么区别?
高斯消元停在行阶梯形,最后用回代求解。高斯-若尔当一直做到简化形,解可以直接读出,代价是运算量更大。
怎么输入一个方程组?
写成增广矩阵:每个方程一行,每个未知数一列,最后一列放常数项。三元一次方程组就是一个 3×4 矩阵。
结果中出现零行是什么意思?
那个方程是其他方程的组合,没有提供新信息。此时方程组通常有无穷多解。
怎么看出方程组无解?
看是否存在某一行左边全为零、而常数项不为零。它表示 0 = c,这是矛盾的。
可以从简化形读出秩吗?
可以——秩就是简化形中非零行的个数。计算器也有专门的秩按钮,做的正是这件事。

其他计算器