输入矩阵,打开高级标签页,点击 A⁻¹。如果矩阵是奇异的,你会看到一条 明确的提示,而不是一个错误答案。分步面板把中间值显示为精确分数——是 3/5,不是 0.6000000001——因为它用的是有理数算术,而不是浮点数。
逆矩阵何时存在
逆矩阵 A⁻¹ 是把原矩阵撤销的那个矩阵:A·A⁻¹ = A⁻¹·A = I。它只对方阵存在, 而且只有当行列式不为零时才存在。行列式为零的矩阵称为奇异矩阵,它根本没有逆——没有大的,也没有近似的,一个都没有。变换毁掉了信息, 没有任何矩阵能把它找回来。
2×2 的捷径
交换主对角线,把副对角线变号,再除以行列式:
| a | b |
| c | d |
| d | −b |
| −c | a |
除以 ad − bc 这一步,正是奇异性现身的地方:行列式为零就没有东西可除,而公式失效的 时刻恰好就是逆矩阵不存在的时刻。
对增广矩阵作高斯-若尔当消元
这是通用方法,也是计算器分步展示的方法。把 A 写在单位阵旁边,做行变换直到左半边变成 单位阵。右半边变成的东西就是 A⁻¹:
| 4 | 7 | 1 | 0 |
| 2 | 6 | 0 | 1 |
| 1 | 0 | 3/5 | −7/10 |
| 0 | 1 | −1/5 | 2/5 |
如果某一刻左边出现了一整行零,就停下:矩阵是奇异的,逆不存在。请务必用乘法检验——A·A⁻¹ 必须精确地等于单位阵,而 A × B 按钮两下就能替你完成这项检查。
上方载入的这个 3×3 矩阵会算出整数,因为它的行列式恰好是 −1:
| 2 | 1 | 1 |
| 1 | 3 | 2 |
| 1 | 0 | 0 |
| 0 | 0 | 1 |
| −2 | 1 | 3 |
| 3 | −1 | −5 |
看看原矩阵的最后一行:它只挑出第一个坐标,把另外两个都丢掉。逆矩阵必须把那些信息补回来,这就是 它的元素相比被求逆的矩阵显得很大的原因。这是一条普遍规律——行列式越接近零,逆矩阵就越大,因为 det(A⁻¹) = 1/det(A)。
伴随矩阵公式
A⁻¹ = adj(A) / det(A),其中伴随矩阵是代数余子式矩阵的转置。先构造余子式矩阵 C(i,j) = (−1)^(i+j)·M(i,j),再转置,最后除以行列式。
这个公式很优雅,证明里用的也是它,因为它把逆写成了封闭形式,而不是某个算法的产物。它同样不实用: 需要 n² 个 n−1 阶行列式。超过 3×3 就该用高斯-若尔当消元。
接近奇异本身就是麻烦
矩阵不必真的奇异才会出问题。只要行列式相对于元素的大小算是小的,这个矩阵就是病态的:输入上一点微小的改动会让逆矩阵产生巨大的变化,而在浮点运算里,那点改动可能纯粹来自舍入误差。 通过这样的逆去解方程组,可能得到一个没有一位数字正确、看上去却完全合理的答案。
这就是下面那条建议背后的实际理由。而这里的分步面板用精确分数运算,完全绕开了这个问题:你读到的是 真正的逆矩阵,而不是它的浮点近似。
为什么你很少真的需要逆矩阵本身
多数时候目标并不是逆矩阵,而是解 Ax = b;逆矩阵只是课堂上记住的那条路。而它是昂贵的 那条。先算出 A⁻¹ 再做乘法,运算量大约是直接把 [A | b] 消元的三倍,而且 精度在两个阶段上损失,而不是一个。
逆矩阵真正站得住脚的场合,是你要的就是这个矩阵本身而非某一个解:读出每个输入对每个输出的影响、 把它与别的变换复合,或者代入一条用 A⁻¹ 写成的公式。如果你只想要 x,请用消元法;如果同一个 A 要配上很多组解,请用LU 分解,那还要更省。
值得记住的性质与检验
- 算完务必检验:把答案与原矩阵相乘,必须得到单位阵。
(A·B)⁻¹ = B⁻¹·A⁻¹——顺序颠倒过来。(Aᵀ)⁻¹ = (A⁻¹)ᵀ——转置和求逆可以交换次序。det(A⁻¹) = 1 / det(A),所以接近奇异的矩阵,其逆会很大。- 正交矩阵满足
A⁻¹ = Aᵀ,求逆等于不花力气。 - 对角矩阵的逆,就是把对角线上每个元素取倒数;零出现在对角线上就说明它不可逆。
常见错误
- 把元素一个个取倒数。逆矩阵不是倒数构成的矩阵——
1/a(i,j)与它毫无关系。 - 把顺序搞反。是
(A·B)⁻¹ = B⁻¹·A⁻¹,不是A⁻¹·B⁻¹。 - 用逆矩阵解方程组。对
Ax = b而言,把[A | b]消元运算更少、数值上也更准确。 - 在大矩阵上用伴随矩阵。它需要
n²个n−1阶行列式,超过 3×3 就比消元慢得多。 - 把逆矩阵和转置混为一谈。两者只在正交矩阵上重合,一般情况下毫无关系。