· 线性代数

3 · 线性方程组、行列式与逆

矩阵把向量「变」过去了。本节问反方向:给定结果,能不能反推输入?变换能不能撤销?这统一了线性方程组、行列式、逆矩阵三件事。

矩阵把向量「变」过去了。本节问反方向的问题:给定结果,能不能反推输入?变换能不能撤销? 这统一了线性方程组、行列式、逆矩阵三件事。


一、线性方程组就是一个矩阵方程

一组线性方程,比如

{2x+y=5x3y=1\begin{cases} 2x + y = 5 \\ x - 3y = -1 \end{cases}

可以打包成 Ax=b\mathbf{A}\mathbf{x} = \mathbf{b}

[2113][xy]=[51]\begin{bmatrix} 2 & 1 \\ 1 & -3 \end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 5 \\ -1 \end{bmatrix}

求解 = 寻找哪个输入向量 x,经过变换 A 后落到 b

二、高斯消元(Gaussian Elimination)

最通用的解法。通过三种「行变换」把矩阵化成阶梯形,逐步解出未知数:

  1. 交换两行;2. 某行乘以非零常数;3. 某行加上另一行的倍数。

这些操作不改变解集。化到上三角后「回代」即可。计算机求解线性系统(以及求逆、求行列式)底层基本都是它的变体(如 LU 分解)。

三、秩(Rank):方程到底有几个有效约束

是矩阵中线性无关的行(或列)的最大数目,记 rank(A)\text{rank}(\mathbf{A})。它衡量「变换后空间没被压扁的维度」。

解的情况由秩决定:

情况
系数阵满秩唯一解
不满秩但相容无穷多解
不满秩且不相容无解

数据直觉:特征矩阵不满秩 = 特征间存在线性相关(多重共线性),会让线性回归参数无法唯一确定。这正是岭回归等正则化要解决的问题。

四、行列式(Determinant):变换的「体积缩放因子」

方阵的行列式 det(A)\det(\mathbf{A}) 是一个数,几何含义极其清晰:它是变换后单位面积(体积)的缩放倍数

二阶公式:

det[abcd]=adbc\det\begin{bmatrix} a & b \\ c & d \end{bmatrix} = ad - bc

关键解读:

五、逆矩阵(Inverse):撤销变换

如果存在矩阵 A1\mathbf{A}^{-1} 使得 A1A=I\mathbf{A}^{-1}\mathbf{A} = \mathbf{I},它就是 A 的逆——代表「把 A 的变换原样撤销」的反向变换。此时方程有唯一解:

x=A1b\mathbf{x} = \mathbf{A}^{-1}\mathbf{b}

可逆的充要条件(互相等价,记住任一即可):det(A)0\det(\mathbf{A}) \neq 0 ⟺ 满秩 ⟺ 列向量线性无关 ⟺ 只有零解的齐次方程。

工程提醒:实际计算中几乎从不显式求逆(数值不稳定、慢),而是用消元/分解直接解 Ax=b\mathbf{A}\mathbf{x}=\mathbf{b}。「求逆」更多是理论概念。

六、跨领域应用

区块链 —— 纠删码恢复数据:Reed–Solomon 把 k 个数据块编码成 n 个块(n>k)。任意拿到其中 k 个块,对应一个 k×k 的范德蒙子矩阵,因其行列式非零(满秩)必可逆,于是 x=A1b\mathbf{x} = \mathbf{A}^{-1}\mathbf{b} 就恢复出原始数据。Danksharding 的数据可用性采样正建立在「满秩 ⟹ 可恢复」之上。

密码学 —— 希尔密码:用一个可逆矩阵加密文本,解密就是乘以逆矩阵。要求矩阵在模运算(有限域)下可逆,即行列式与模数互质。

AI —— 线性回归的正规方程:最小二乘解 β^=(XX)1Xy\hat{\boldsymbol{\beta}} = (\mathbf{X}^\top \mathbf{X})^{-1}\mathbf{X}^\top \mathbf{y},能否求解取决于 XX\mathbf{X}^\top\mathbf{X} 是否可逆(即特征是否线性无关)。

七、小结

概念几何含义关键作用
高斯消元系统化解方程通用求解
没被压扁的维度判断解的个数
行列式体积缩放因子det=0 即不可逆
逆矩阵撤销变换唯一解、数据恢复

下一节:怎么衡量两个向量「像不像」「有多远」「垂不垂直」?这就需要内积、正交与投影


八、进阶:LU 分解(计算机怎么解方程)

手算用消元,计算机更喜欢把消元过程「存下来复用」,这就是 LU 分解:把 A\mathbf{A} 拆成下三角 L\mathbf{L} 与上三角 U\mathbf{U}

A=LU\mathbf{A}=\mathbf{L}\mathbf{U}

Ax=b\mathbf{A}\mathbf{x}=\mathbf{b} 时分两步「前代+回代」,都是三角系统,极快:

Ly=b    Ux=y\mathbf{L}\mathbf{y}=\mathbf{b}\;\Rightarrow\;\mathbf{U}\mathbf{x}=\mathbf{y}

好处:同一个 A\mathbf{A} 换不同的 b\mathbf{b} 只需分解一次,比每次都从头消元省得多。实际中常配合行交换(部分主元)写成 PA=LU\mathbf{P}\mathbf{A}=\mathbf{L}\mathbf{U},提升数值稳定性。

九、克拉默法则(Cramer’s Rule)

用行列式直接写出解:xi=det(Ai)det(A)x_i=\dfrac{\det(\mathbf{A}_i)}{\det(\mathbf{A})},其中 Ai\mathbf{A}_i 是把 A\mathbf{A} 第 i 列换成 b\mathbf{b}。理论上漂亮,但计算量随维数爆炸增长,只适合手算小系统或理论推导,工程上从不用

十、数字例题(步步算)

{2x+y=5x3y=1\begin{cases}2x+y=5\\x-3y=-1\end{cases}

系数行列式 detA=2(3)11=70\det\mathbf{A}=2\cdot(-3)-1\cdot1=-7\neq0,有唯一解。用克拉默:

x=det[5113]7=15+17=2,y=det[2511]7=257=1x=\dfrac{\det\begin{bmatrix}5&1\\-1&-3\end{bmatrix}}{-7}=\dfrac{-15+1}{-7}=2,\quad y=\dfrac{\det\begin{bmatrix}2&5\\1&-1\end{bmatrix}}{-7}=\dfrac{-2-5}{-7}=1

解为 (x,y)=(2,1)(x,y)=(2,1)。代回原式验证:22+1=52\cdot2+1=5✓,23=12-3=-1✓。

十一、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)

十二、动手算一算

  1. 方程组系数矩阵 det=0\det=0,能断定无解吗?
  2. XX\mathbf{X}^\top\mathbf{X} 不可逆,对线性回归意味着什么?怎么补救?
  3. 为什么工程上 np.linalg.solve(A, b) 优于 np.linalg.inv(A) @ b

答案:(1) 不能;可能无解,也可能无穷多解,取决于 b\mathbf{b} 是否落在列空间。(2) 特征间存在多重共线性,参数不唯一;可加 L2 正则(岭回归)让 XX+λI\mathbf{X}^\top\mathbf{X}+\lambda\mathbf{I} 可逆。(3) 求逆数值误差更大、更慢,solve 内部用分解直接回代,更准更快。