四个基本子空间

四个基本子空间

学习目标

完成本节后,你将能够: - 描述矩阵的四个基本子空间 - 计算各子空间的一组基 - 理解子空间之间的正交关系 - 画出基本子空间关系图

1. 四个基本子空间概述

对于一个 \(m \times n\) 的矩阵 \(A\),四个基本子空间是:

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

其中 \(r = \text{rank}(A)\)。

2. 正交关系——最重要的洞察

### 2.1 正交补

行空间 ⟂ 零空间:\(C(A^T) \perp N(A)\)

为什么?因为 \(A\mathbf{x} = \mathbf{0}\) 意味着 \(A\) 的每一行与 \(\mathbf{x}\) 正交。所以 \(\mathbf{x}\) 与所有行正交,从而与整个行空间正交。

列空间 ⟂ 左零空间:\(C(A) \perp N(A^T)\)

### 2.2 正交补的含义

\[\mathbb{R}^n = C(A^T) \oplus N(A)\] \[\mathbb{R}^m = C(A) \oplus N(A^T)\]

意义:\(\mathbb{R}^n\) 中的任何向量可以唯一地分解为行空间分量 + 零空间分量。这两个分量相互垂直。

3. 通过行最简形 (RREF) 求基本子空间

### 3.1 理解行最简形

行最简形是消元过程的终点——你在主元位置得到 1,并且主元上方的列也被清除。

\[A \rightarrow R = \text{rref}(A)\]

  • **主元列**在 RREF 中是标准基向量
  • **自由列**对应零空间中的特殊解

### 3.2 用 RREF 求基

行空间基:RREF 中的非零行 列空间基:原矩阵中对应主元列的列 零空间基:解 \(R\mathbf{x} = \mathbf{0}\) 的特殊解

def rref(A):
    """计算行最简形"""
    A = A.astype(float).copy()
    m, n = A.shape
    row = 0
    for col in range(n):
        if row >= m: break
        # 找主元
        pivot = np.argmax(abs(A[row:, col])) + row
        if abs(A[pivot, col]) < 1e-10: continue
        A[[row, pivot]] = A[[pivot, row]]
        # 归一化
        A[row] /= A[row, col]
        # 清除其他行
        for r in range(m):
            if r != row:
                A[r] -= A[r, col] * A[row]
        row += 1

A = np.array([[1, 2, 3], [2, 4, 6], [1, 2, 3]]) R = rref(A) print("RREF:") print(np.round(R, 2)) # 非零行是行空间基 # 主元列对应原矩阵的列是列空间基 ```

4. Python 综合:四个子空间计算

def all_subspaces(A):
    """用 SVD 计算四个基本子空间"""
    m, n = A.shape
    U, s, Vt = np.linalg.svd(A)

return { "列空间 C(A)": U[:, :r], "左零空间 N(A^T)": U[:, r:], "行空间 C(A^T)": Vt[:r].T, "零空间 N(A)": Vt[r:].T, }

A = np.array([[1, 0, 1], [2, 1, 3], [1, 0, 1]]) subspaces = all_subspaces(A) for name, basis in subspaces.items(): print(f"{name} (dim={basis.shape[1]}):") print(np.round(basis, 3)) print()

# 验证正交性 CS = subspaces["列空间 C(A)"] NS = subspaces["左零空间 N(A^T)"] print("C(A) ⟂ N(A^T)?", np.allclose(CS.T @ NS, 0)) ```

5. 本节习题

  1. 对 3×5 的秩为 2 的矩阵,四个子空间的维度分别是多少?
  2. 证明 \(C(A^T)\) 和 \(N(A)\) 是正交补
  3. 找出 \(A = \begin{bmatrix} 1 & 2 \\ 2 & 4 \end{bmatrix}\) 的四个子空间并验证正交关系
  4. 为什么 \(A\) 和 \(A^T\) 有相同的秩?
  5. 如果 \(A\) 是 5×3 满秩矩阵,哪些子空间只有零向量?

总结

- 四个基本子空间完整刻画了矩阵的映射行为 - 行空间和零空间在 \(\mathbb{R}^n\) 中互补,列空间和左零空间在 \(\mathbb{R}^m\) 中互补 - \(C(A^T) \perp N(A)\),\(C(A) \perp N(A^T)\) - SVD 是计算所有四个子空间的最简洁方法