Series · Linear Algebra · Chapter 5

线性方程组与列空间

Ax = b 何时有解?有几个解?真正的答案是几何的:取决于 b 是否落在 A 的列空间里,也取决于 A 把多少输入维度压成了零。本章把高斯消元、列空间、零空间、秩与秩-零化度定理串成同一幅结构图。

一个贯穿一切的核心问题

应用数学几乎所有的问题,绕到最后都会回到同一个问题上:

给定矩阵 $A$ 和向量 $\vec{b}$,方程 $A\vec{x}=\vec{b}$ 有没有解?如果有,有多少个?

机械的答案是"消元、看结果"。但结构性的答案才真正有趣,也是本章的目标。三个几何对象就足以回答一切:

  • 列空间 $C(A)$ —— $A$ 能"够到"的所有向量。它决定有没有解
  • 零空间 $N(A)$ —— 被 $A$ 压成零的所有向量。它决定解有多少个
  • $r$ —— 列空间的维数,量化 $A$ 保留了多少信息。

把这三个东西看清楚,线性方程组的所有结论 —— 解的存在性、唯一性、最小二乘、四个基本子空间 —— 就都成了同一个故事的不同侧面。

你将学到

  • 看 $A\vec{x}=\vec{b}$ 的两种互补视角:行视角(超平面相交)vs. 列视角(列向量的线性组合)
  • 高斯消元作为操作工具,以及它作为 LU 分解的另一面
  • 列空间、零空间、秩的几何含义
  • 秩-零化度定理与四个基本子空间
  • 拿到任何一个线性方程组,一眼读出它的解结构

预备知识

  • 第 2 章:张成、线性无关、基
  • 第 3 章:矩阵作为线性变换
  • 第 4 章:行列式与可逆性

看 $A\vec{x}=\vec{b}$ 的两种方式

行视角:超平面相交

考虑方程组:

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

每个方程刻画平面上的一条直线。解就是同时落在两条直线上的那个点 —— 它们的交点 $(1, 2)$。在三维里,每个方程是一个平面,解是这些平面的交集(点、线、面或者空集)。

这是高中教的画面,几何感很强,但它遮住了矩阵本身的结构

列视角:把列向量混合起来

同一个方程组可以写成:

$$ x \begin{pmatrix} 1 \\ 3 \end{pmatrix} + y \begin{pmatrix} 2 \\ -1 \end{pmatrix} = \begin{pmatrix} 5 \\ 1 \end{pmatrix} $$

问题就变成了:能否用 $A$ 的列向量按某种比例配出 $\vec{b}$? 解方程,就是寻找这个"配方"。

这一个视角的转换,是整章里最关键的一步。换个角度,列空间、秩、解的存在性这些概念会自动浮出水面。

Ax = b 的几何意义:能不能解,取决于 b 是否在列空间里

上图把两面都摆在一起。左边:两列 $\vec{a}_1, \vec{a}_2$ 张成整个平面,所以任何目标 $\vec{b}$ 都能拼出来 —— 选对系数,平行四边形会正好闭合到 $\vec{b}$。右边:两列恰好平行,列空间塌缩成一条直线。落在直线之外的 $\vec{b}$ 根本够不着;我们能做的最好就是把它投影到直线上 —— 这正是最小二乘法背后的几何。

画家的类比。 你站在空白画布前,手里有三管颜料($A$ 的三列)。列空间就是你能调出的所有颜色。如果两管是同一种色,调来调去也调不出新颜色,可用色域比看上去小。这种"看似有三种、实际只有两种",就是矩阵秩亏的真实手感。


高斯消元:操作上的主力

三种合法操作

消元法用三种初等行变换简化方程组,同时不改变解集:

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

为什么这三种合法?因为它们都可逆:任何一连串行变换都能逆回去,所以变换前后的解集一字不差。

一个完整的例子

求解:

$$ \begin{cases} x + 2y + z = 2 \\ 3x + 8y + z = 12 \\ 4y + z = 2 \end{cases} $$

写出增广矩阵,从第一个主元开始向下消元。

高斯消元:把方程组化成阶梯形的过程

每一个被高亮的格子就是一个主元 —— 该行第一个非零元素。化成上三角后,回代求解

  • 第三行:$5z = -10 \implies z = -2$;
  • 第二行:$2y - 2z = 6 \implies y = 7/2$;
  • 第一行:$x + 2y + z = 2 \implies x = -11/2$。

三列三个主元、三未知数 —— 三个独立约束,唯一解。

主元与自由变量

消元结束后,列被分成两类:

  • 主元列:含主元的列,对应的变量由其他变量决定;
  • 自由列:没有主元的列,对应的变量可以任意取值。

这一划分决定了解的所有可能:

情况解的结构
每一列都是主元列唯一解
有自由列无穷多解(每选一组自由变量得到一个解)
出现 $0 = c \neq 0$ 的行无解

LU 分解:把消元的过程"存"下来

每一次"用某行减去另一行的若干倍",本质上等价于左乘一个简单的下三角矩阵。把所有这些下三角矩阵乘起来,就得到一个 $L$,使得:

$$ A = L \cdot U $$

其中 $U$ 是消元结束后的上三角矩阵,$L$ 的元素就是消元过程中用过的乘数。LU 分解就是消元法的"录像带" —— 录好之后,对任何新的 $\vec{b}$ 求解 $A\vec{x}=\vec{b}$,只需 $O(n^2)$ 而不是重新消元的 $O(n^3)$。

LU 分解:A = L·U 等价于两次简单错切

几何上的画面很漂亮。$A$ 看起来复杂,消元却把它拆成了两个最简单的变换:先一次上三角错切兼缩放($U$),再一次下三角错切($L$)。三角矩阵之所以易处理,是因为它们的作用是因果的 —— 每个输出坐标只依赖于"更早"的输入坐标,这正是回代法奏效的原因。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import numpy as np

A = np.array([[1, 2, 1],
              [3, 8, 1],
              [0, 4, 1]], dtype=float)
b = np.array([2, 12, 2], dtype=float)

x = np.linalg.solve(A, b)
print(f"解: {x}")
print(f"验证 Ax = {A @ x}")

列空间:矩阵能"够到"的地方

定义

矩阵 $A$ 的列空间(记作 $C(A)$ 或 $\text{Col}(A)$)是 $A$ 能产生的全部向量:

$$ C(A) = \{\, A\vec{x} \mid \vec{x} \in \mathbb{R}^n \,\} = \text{span}\{\,\text{$A$ 的所有列}\,\} $$

两种等价的解读:它是所有可能的输出,也是所有列向量的张成

解的存在定理

$A\vec{x}=\vec{b}$ 有解 当且仅当 $\vec{b} \in C(A)$。

这是本章最干净的一句话。“方程有没有解?“被翻译成"目标在不在列空间里?” —— 一个纯粹的几何问题。

列空间长什么样

列空间 = A 的列向量的张成

对于 $3 \times 3$ 矩阵,列空间住在 $\mathbb{R}^3$ 里,本质上只有三种可能:

列空间含义
1过原点的一条直线所有列都是同一方向的倍数
2过原点的一个平面两个独立方向,第三列是冗余的
3整个 $\mathbb{R}^3$三个独立方向,$A$ 可逆

这种规律推广到一般情况:$m \times n$ 矩阵的列空间是 $\mathbb{R}^m$ 中某个 $r$ 维子空间,$r$ 就是秩。

调音台的类比。 想象一个有三个推子的混音器(三列)和一个总输出。所有可能调出的混音构成列空间。如果两个通道恰好播同一段乐器,推子怎么动也调不出新东西 —— 这种冗余就是"秩亏"在听觉上的样子。


零空间:被压扁的方向

定义

矩阵 $A$ 的零空间(记作 $N(A)$ 或 $\ker A$)是被映到零的所有输入:

$$ N(A) = \{\, \vec{x} \mid A\vec{x} = \vec{0} \,\} $$

零空间永远包含零向量(因为 $A\vec{0} = \vec{0}$)。真正有趣的问题是:它有没有别的东西。

零空间 N(A):A 把哪些方向碾成了零

这张图把几何主旨说透了。:矩阵 $A=\begin{pmatrix}1&2\\2&4\end{pmatrix}$ 的两行线性相关,零空间是整条直线 $\text{span}\{(-2,1)\}$,沿这条线的每个向量都被映到原点;它的像(列空间)是另一条方向为 $(1,2)$ 的直线。:把 $\mathbb{R}^3$ 投影到 $\mathbb{R}^2$、丢掉 $z$ 坐标的矩阵,零空间就是整条 $z$ 轴 —— 所有竖直方向都被一把抹掉。

零空间为什么决定解的唯一性

如果 $\vec{x}_p$ 是 $A\vec{x}=\vec{b}$ 的任意一个特解,那么对任意 $\vec{n} \in N(A)$:

$$ A(\vec{x}_p + \vec{n}) = A\vec{x}_p + A\vec{n} = \vec{b} + \vec{0} = \vec{b} $$

所以 $\vec{x}_p + \vec{n}$ 也是解。完整的解集永远是:

$$ \{\, \vec{x}_p + \vec{n} \mid \vec{n} \in N(A) \,\} $$

几何画面非常清楚:把零空间(一条过原点的子空间)整体平移一个特解,就得到一片平行于零空间的仿射子空间 —— 这就是解集本身。

  • 若 $N(A) = \{\vec{0}\}$:解唯一(前提是有解);
  • 若 $N(A)$ 含非零向量:无穷多解,且形状由零空间刻画。

压路机的类比。 压路机把三维物体压成一张二维煎饼,所有竖直运动都丢失了 —— 竖直方向就在零空间里。两个仅有竖直差异的物体压完一模一样:零空间正是"压扁"这个变换无法逆回去时的全部歧义。


秩:有效维度

矩阵 $A$ 的定义为:

$$ \text{rank}(A) = \dim C(A) = \text{消元后主元的个数} $$

它也等于线性无关列的最大数目;并且(一个小奇迹)等于线性无关的最大数目。行秩 = 列秩对任何矩阵都成立 —— 一旦证明出来似乎平淡无奇,实则揭示了行与列之间深刻的对称性。

秩告诉你什么

秩计数的是有效维度 —— 变换实际保留了多少独立方向。

$3\times 3$ 矩阵的秩几何效果
3(满秩)$\mathbb{R}^3 \to \mathbb{R}^3$ 双射,可逆
2三维空间被压成平面
1三维空间被压成直线
0零矩阵;一切都被压到原点

信息的类比。 秩就是独立信息通道的数量。彩色照片的每像素携带秩 3 ���信息(R、G、B);转成灰度后秩降为 1,丢掉了两个完整通道。在机器学习里,低秩近似就是同一个想法搬到数据矩阵上:只保留主要通道,扔掉次要的。

1
2
3
4
5
6
7
import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

print(f"秩: {np.linalg.matrix_rank(A)}")  # 2  (第三行 = 2*第二行 - 第一行)

秩-零化度定理

对任意 $m \times n$ 矩阵 $A$:

$$ \boxed{\;\text{rank}(A) + \dim N(A) = n\;} $$

一句话讲清楚:保留���维度 + 被压扁的维度 = 输入维度。没有创造,也没有损失。

秩-零化度定理:每一个输入维度,要么被保留、要么被压扁

左边的横条图就是定理的图形版:对每一个矩阵,蓝色(秩)和橙色(零化度)相加都正好等于 $n$。右边的饼图把同一件事画成对输入空间 $\mathbb{R}^n$ 的二分 —— 一部分"保留”(行空间),一部分"压扁"(零空间)。

例子

设 $A$ 是 $3 \times 5$ 矩阵,秩 $r = 2$。则:

$$ \dim N(A) = n - r = 5 - 2 = 3 $$

三个自由变量、三维零空间、二维列空间住在 $\mathbb{R}^3$ 里 —— 全部结构信息都从一个数字里读出来了。


$A\vec{x}=\vec{b}$ 的四种情形

对秩为 $r$ 的 $m \times n$ 矩阵,只有四种可能。

Ax = b 的三种面貌:唯一解、无穷多解、无解

情形 1:$r = m = n$ —— 满秩方阵

$A$ 可逆。任何 $\vec{b}$ 都恰好对应一个解 $\vec{x} = A^{-1}\vec{b}$。列空间 $= \mathbb{R}^m$,零空间 $= \{\vec{0}\}$。

情形 2:$r = n < m$ —— 高瘦满列秩(超定)

方程数大于未知数。列空间是 $\mathbb{R}^m$ 的真子空间,所以大多数 $\vec{b}$ 不可达。一旦有解必然唯一;实践中我们用最小二乘找最近的可达 $\vec{b}$ —— 上图右侧那个橙色点正是这种"最佳近似"。

情形 3:$r = m < n$ —— 矮宽满行秩(欠定)

未知数比方程多。列空间充满 $\mathbb{R}^m$,所以每个 $\vec{b}$ 都有解;但零空间维度 $n - m > 0$,所以解有无穷多。中间那张图给出了典型画面:解集是一条(或一个面、或更高)的"等价答案"。

情形 4:$r < m$ 且 $r < n$ —— 秩亏

最微妙的一种。一些 $\vec{b}$ 无解,另一些有无穷多解 —— 两种病态同时出现。


四个基本子空间

对秩为 $r$ 的 $m \times n$ 矩阵 $A$,四个子空间道尽全部结构:

子空间符号所在空间维度
列空间$C(A)$$\mathbb{R}^m$$r$
零空间$N(A)$$\mathbb{R}^n$$n - r$
行空间$C(A^T)$$\mathbb{R}^n$$r$
左零空间$N(A^T)$$\mathbb{R}^m$$m - r$

它们成对正交互补

  • 在 $\mathbb{R}^n$ 里:行空间与零空间互为正交补。每个输入向量都唯一地分解为"有用部分"(行空间)+ “废弃部分”(零空间)。
  • 在 $\mathbb{R}^m$ 里:列空间与左零空间互为正交补。每个输出方向要么落在列空间里,要么完全不可达。

矩阵 $A$ 在这两组结构之间扮演着干净的角色:把行空间双射地送到列空间(两边都是 $r$ 维),把零空间整体压成零。Strang 把这幅图叫作"线性代数的大画面"——一旦内化它,你就不再把矩阵看成数表,而是看成一台几何机器。


工程应用

最小二乘:当方程组无精确解

当 $A\vec{x}=\vec{b}$ 无精确解(超定方程组)时,我们极小化残差 $\|A\vec{x}-\vec{b}\|^2$。极小元满足正规方程

$$ A^T A \hat{x} = A^T \vec{b} $$

几何上,$A\hat{x}$ 是 $\vec{b}$ 在列空间上的正交投影 —— 距离最近的可达点。

1
2
3
4
5
6
7
8
import numpy as np

# 用 y = ax + b 拟合 (1,2), (2,3), (3,5), (4,4)
A = np.array([[1, 1], [2, 1], [3, 1], [4, 1]])
b = np.array([2, 3, 5, 4])

x, *_ = np.linalg.lstsq(A, b, rcond=None)
print(f"最佳拟合: y = {x[0]:.2f}x + {x[1]:.2f}")

计算机图形学:投影

把 3D 点投到 2D 屏幕,本质就是矩阵乘法:

$$ P = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \end{pmatrix} $$

它的零空间是整条 $z$ 轴:深度信息被销毁。这正是为什么仅靠一张 2D 图像几乎不可能恢复 3D 结构 —— 你必须借助立体视觉、运动信息或某种学到的先验。

电路分析

基尔霍夫电流定律可写成 $A\vec{i} = \vec{0}$,其中 $A$ 是电路网络的关联矩阵。$A$ 的零空间就是所有合法回路电流构成的空间,它的维度等于电路中独立回路的数目 —— 一个拓扑事实,从纯线性代数里提炼出来。


思维框架:动手算之前先问三个问题

看到一个线性方程组,别急着消元。先问自己:

  1. 列空间是什么? 它告诉你哪些 $\vec{b}$ 可解。
  2. 零空间是什么? 它告诉你解唯一与否,以及解集长什么形状。
  3. 秩是多少? 它量化 $A$ 保留了多少信息。

这三个问题都能用消元法回答 —— 但消元只是记账,几何才是本质。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np

def analyze_system(A, b):
    """打印 Ax = b 的解结构。"""
    m, n = A.shape
    r = np.linalg.matrix_rank(A)
    r_aug = np.linalg.matrix_rank(np.column_stack([A, b]))

    print(f"矩阵: {m}x{n}, 秩={r}, 零化度={n-r}")

    if r_aug > r:
        print("  → 无解(b 不在列空间中)")
    elif r == n:
        print("  → 唯一解")
        print(f"     x = {np.linalg.lstsq(A, b, rcond=None)[0]}")
    else:
        print(f"  → 无穷多解({n-r} 个自由变量)")
        print(f"     一个特解 x = {np.linalg.lstsq(A, b, rcond=None)[0]}")

# 唯一解
analyze_system(np.array([[1, 2], [3, -1]], dtype=float),
               np.array([5, 1], dtype=float))

# 无穷多解
analyze_system(np.array([[1, 2, 3], [2, 4, 6]], dtype=float),
               np.array([1, 2], dtype=float))

本章小结

概念它告诉你什么
列空间 $C(A)$哪些 $\vec{b}$ 可解
零空间 $N(A)$解是否唯一;解集的形状
$A$ 保留多少独立方向
秩-零化度$\text{rank} + \text{nullity} = n$,是关于维度的守恒律
四个子空间任何矩阵的完整结构图

线性代数最本质的思维方式,是用空间和维度去理解方程,而不是机械地堆砌计算。消元法依然是干活的主力,但它真正的任务,是把本就存在于矩阵内部的几何亮出来给你看。


下一章预告

第 6 章:特征值与特征向量。 在矩阵作用下,大多数向量都会改变方向。但有少数特殊的向量只会被拉伸或压缩 —— 它们是 $A$ 的"天然坐标轴",是矩阵变成简单缩放的方向。找到它们,你就理解了任何线性系统的长期行为。


系列导航

Liked this piece?

Follow on GitHub for the next one — usually one a week.

GitHub