3 · 线性方程组、行列式与逆
矩阵把向量「变」过去了。本节问反方向:给定结果,能不能反推输入?变换能不能撤销?这统一了线性方程组、行列式、逆矩阵三件事。
矩阵把向量「变」过去了。本节问反方向的问题:给定结果,能不能反推输入?变换能不能撤销? 这统一了线性方程组、行列式、逆矩阵三件事。
一、线性方程组就是一个矩阵方程
一组线性方程,比如
可以打包成 :
求解 = 寻找哪个输入向量 x,经过变换 A 后落到 b。
二、高斯消元(Gaussian Elimination)
最通用的解法。通过三种「行变换」把矩阵化成阶梯形,逐步解出未知数:
- 交换两行;2. 某行乘以非零常数;3. 某行加上另一行的倍数。
这些操作不改变解集。化到上三角后「回代」即可。计算机求解线性系统(以及求逆、求行列式)底层基本都是它的变体(如 LU 分解)。
三、秩(Rank):方程到底有几个有效约束
秩是矩阵中线性无关的行(或列)的最大数目,记 。它衡量「变换后空间没被压扁的维度」。
- 满秩(rank = n):变换没有丢失维度,信息可完全恢复。
- 不满秩:变换把空间压扁了(比如把平面压成直线),多个输入映到同一输出,不可逆。
解的情况由秩决定:
| 情况 | 解 |
|---|---|
| 系数阵满秩 | 唯一解 |
| 不满秩但相容 | 无穷多解 |
| 不满秩且不相容 | 无解 |
数据直觉:特征矩阵不满秩 = 特征间存在线性相关(多重共线性),会让线性回归参数无法唯一确定。这正是岭回归等正则化要解决的问题。
四、行列式(Determinant):变换的「体积缩放因子」
方阵的行列式 是一个数,几何含义极其清晰:它是变换后单位面积(体积)的缩放倍数。
二阶公式:
关键解读:
- :变换把面积放大到 2 倍。
- :空间被压扁到更低维度(面积变 0),信息丢失,矩阵不可逆。这是判断可逆性的核心判据。
- :发生了「翻转」(如镜像),方向反转。
五、逆矩阵(Inverse):撤销变换
如果存在矩阵 使得 ,它就是 A 的逆——代表「把 A 的变换原样撤销」的反向变换。此时方程有唯一解:
可逆的充要条件(互相等价,记住任一即可): ⟺ 满秩 ⟺ 列向量线性无关 ⟺ 只有零解的齐次方程。
工程提醒:实际计算中几乎从不显式求逆(数值不稳定、慢),而是用消元/分解直接解 。「求逆」更多是理论概念。
六、跨领域应用
区块链 —— 纠删码恢复数据:Reed–Solomon 把 k 个数据块编码成 n 个块(n>k)。任意拿到其中 k 个块,对应一个 k×k 的范德蒙子矩阵,因其行列式非零(满秩)必可逆,于是 就恢复出原始数据。Danksharding 的数据可用性采样正建立在「满秩 ⟹ 可恢复」之上。
密码学 —— 希尔密码:用一个可逆矩阵加密文本,解密就是乘以逆矩阵。要求矩阵在模运算(有限域)下可逆,即行列式与模数互质。
AI —— 线性回归的正规方程:最小二乘解 ,能否求解取决于 是否可逆(即特征是否线性无关)。
七、小结
| 概念 | 几何含义 | 关键作用 |
|---|---|---|
| 高斯消元 | 系统化解方程 | 通用求解 |
| 秩 | 没被压扁的维度 | 判断解的个数 |
| 行列式 | 体积缩放因子 | det=0 即不可逆 |
| 逆矩阵 | 撤销变换 | 唯一解、数据恢复 |
下一节:怎么衡量两个向量「像不像」「有多远」「垂不垂直」?这就需要内积、正交与投影。
八、进阶:LU 分解(计算机怎么解方程)
手算用消元,计算机更喜欢把消元过程「存下来复用」,这就是 LU 分解:把 拆成下三角 与上三角 :
解 时分两步「前代+回代」,都是三角系统,极快:
好处:同一个 换不同的 只需分解一次,比每次都从头消元省得多。实际中常配合行交换(部分主元)写成 ,提升数值稳定性。
九、克拉默法则(Cramer’s Rule)
用行列式直接写出解:,其中 是把 第 i 列换成 。理论上漂亮,但计算量随维数爆炸增长,只适合手算小系统或理论推导,工程上从不用。
十、数字例题(步步算)
解 。
系数行列式 ,有唯一解。用克拉默:
解为 。代回原式验证:✓,✓。
十一、NumPy 代码
import numpy as np
from scipy.linalg import lu
A = np.array([[2.0, 1.0], [1.0, -3.0]])
b = np.array([5.0, -1.0])
# 正确解法:直接解,不要手动求逆
x = np.linalg.solve(A, b)
print("解 =", x) # [2. 1.]
print("行列式 =", np.linalg.det(A)) # -7
print("秩 =", np.linalg.matrix_rank(A)) # 2,满秩
# LU 分解
P, L, U = lu(A)
print("L=\n", L, "\nU=\n", U)
# 区块链:Reed-Solomon 恢复(范德蒙矩阵求逆思路)
xs = np.array([1, 2, 3]) # 求值点
V = np.vander(xs, increasing=True) # 范德蒙矩阵
data = np.array([10, 20, 30])
coeffs = np.linalg.solve(V, data) # 由编码块恢复原系数
print("恢复的多项式系数 =", coeffs)
十二、动手算一算
- 方程组系数矩阵 ,能断定无解吗?
- 不可逆,对线性回归意味着什么?怎么补救?
- 为什么工程上
np.linalg.solve(A, b)优于np.linalg.inv(A) @ b?
答案:(1) 不能;可能无解,也可能无穷多解,取决于 是否落在列空间。(2) 特征间存在多重共线性,参数不唯一;可加 L2 正则(岭回归)让 可逆。(3) 求逆数值误差更大、更慢,solve 内部用分解直接回代,更准更快。