7线性代数应该这样学(第3版)

有限维向量空间上的算子

谱定理

自伴算子谱定理正交投影QR分解

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第7章 有限维向量空间上的算子 - 谱定理 (Operators on Finite-Dimensional Vector Spaces)

一、导读

7.1 本章学习目标

通过本章的学习,你将能够:

理解谱定理的核心内容:掌握自伴算子在标准正交基下可对角化的定理,理解其重要性

掌握正规算子的概念:理解 $TT^ = T^T$ 的条件及其几何意义

理解谱分解的形式:掌握如何将自伴算子表示为正交投影的加权和

掌握实对称矩阵的性质:理解为什么实对称矩阵总有实特征值和正交特征向量

理解酉算子和正交算子:掌握保持内积的线性变换的性质

掌握极分解和奇异值分解(SVD):理解任意矩阵的"特征分解"推广

将谱理论应用于实际问题:如主成分分析、图像压缩、振动分析

7.2 为什么本章如此重要

谱定理是线性代数的巅峰之作。它将前面所有章节的概念(向量空间、线性映射、特征值、内积空间)统一起来,给出了线性算子最优雅的结构描述。

从理论的角度看,谱定理表明自伴算子(或更一般的正规算子)具有"最好"的性质:它们可以在标准正交基下对角化。这意味着复杂的线性变换可以分解为独立的缩放操作,每个缩放沿一个正交方向进行。

从应用的角度看:

  • 物理学:量子力学中的可观测量是自伴算子,谱定理保证了测量结果是实数,且可以找到正交的本征态
  • 工程学:结构振动的模态分析依赖对称矩阵的特征分解;信号处理中的滤波器设计使用谱方法
  • 数据科学:PCA 本质上是协方差矩阵(对称矩阵)的谱分解;推荐系统使用 SVD
  • 计算机图形学:惯性张量的对角化找到主轴;光照计算使用法向量的谱分解
  • 优化:二次型的极值问题转化为特征值问题;半定规划使用谱约束

从认知的角度看,本章帮助你建立"谱思维"。不再将线性算子视为黑盒矩阵,而是看作在特定正交方向上的独立缩放。这种分解视角是理解复杂系统的钥匙。

7.3 核心问题引导

在学习本章时,请持续思考以下问题:

什么是谱定理? 为什么自伴算子可以在标准正交基下对角化?这与一般矩阵的对角化有什么区别?

正规算子与自伴算子有什么关系? 为什么正规算子也可以酉对角化?

谱分解的物理意义是什么? 如何将算子表示为正交投影的加权和?

实对称矩阵有什么特殊性质? 为什么它们的特征值总是实数,特征向量可以选为正交的?

酉算子和正交算子保持什么不变? 它们在几何上对应什么变换?

SVD 与特征分解有什么区别? 为什么 SVD 适用于任意矩阵(包括非方阵)?

极分解如何类比复数的极坐标表示? 它在物理和工程中有何应用?


二、核心概念详解

7.1 自伴算子与谱定理

定义 7.1(自伴算子)

设 $V$ 是内积空间,$T: V \to V$ 是线性算子。如果 $T = T^*$,则称 $T$ 是自伴(Self-Adjoint)或Hermitian算子。

在矩阵语言中,$A = A^*$(共轭转置等于自身)。在实情况下,$A = A^T$(对称矩阵)。

定理 7.1:自伴算子的特征值是实数

设 $T$ 是自伴算子,$\lambda$ 是特征值。则 $\lambda \in \mathbb{R}$。

证明:见定理 6.10。$\square$

深入理解:这个定理的物理意义非常重要。在量子力学中,可观测量(如位置、动量、能量)对应自伴算子,测量结果必须是实数。谱定理保证了这一点。

定理 7.2:自伴算子的不同特征值对应的特征向量正交

设 $T$ 是自伴算子,$\lambda_1 \neq \lambda_2$ 是特征值,$v_1, v_2$ 是对应的特征向量。则 $v_1 \perp v_2$。

证明:

$$\lambda_1 \langle v_1, v_2 \rangle = \langle \lambda_1 v_1, v_2 \rangle = \langle Tv_1, v_2 \rangle = \langle v_1, T^*v_2 \rangle = \langle v_1, Tv_2 \rangle = \langle v_1, \lambda_2 v_2 \rangle = \lambda_2 \langle v_1, v_2 \rangle$$

所以 $(\lambda_1 - \lambda_2)\langle v_1, v_2 \rangle = 0$。由于 $\lambda_1 \neq \lambda_2$,得 $\langle v_1, v_2 \rangle = 0$。$\square$

几何直觉:自伴算子在不同特征值方向上的作用是独立的,这些方向彼此垂直。这使得自伴算子的结构非常"整齐"。

定理 7.3(实谱定理 / 对称矩阵的谱分解)

设 $V$ 是有限维实内积空间,$T: V \to V$ 是自伴算子。则存在 $V$ 的标准正交基由 $T$ 的特征向量组成。

等价地,存在正交矩阵 $Q$($Q^TQ = I$)和对角矩阵 $D$ 使得:

$$T = QDQ^T$$

其中 $D$ 的对角元是 $T$ 的实特征值,$Q$ 的列是对应的单位特征向量。

证明思路:

对 $\dim V$ 进行归纳。

  • 基础情况:$\dim V = 1$,显然成立。
  • 归纳步骤:由代数基本定理,$T$ 有特征值 $\lambda$(可能是复数)。但由于 $T$ 自伴,$\lambda$ 是实数(定理 7.1)。

取对应于 $\lambda$ 的单位特征向量 $e_1$。考虑 $U = \text{span}(e_1)^\perp$。由于 $T$ 自伴,$U$ 是 $T$ 的不变子空间(若 $u \perp e_1$,则 $Tu \perp e_1$)。

$T|_U: U \to U$ 也是自伴算子。由归纳假设,$U$ 有标准正交基由 $T|_U$ 的特征向量组成。加上 $e_1$,得到 $V$ 的标准正交基。$\square$

重要意义:实谱定理保证了对称矩阵总可以正交对角化。这是 PCA、二次型优化等应用的理论基础。

定理 7.4(复谱定理)

设 $V$ 是有限维复内积空间,$T: V \to V$ 是自伴算子。则存在 $V$ 的标准正交基由 $T$ 的特征向量组成。

等价地,存在酉矩阵 $U$($U^*U = I$)和对角矩阵 $D$(实对角元)使得:

$$T = UDU^*$$

7.2 谱分解

定理 7.5(谱分解)

设 $T$ 是自伴算子,特征值为 $\lambda_1, \ldots, \lambda_k$(不同的),对应的特征空间为 $E_1, \ldots, E_k$。设 $P_i$ 是到 $E_i$ 的正交投影。则:

$$T = \lambda_1 P_1 + \cdots + \lambda_k P_k$$

且满足:

$P_i P_j = 0$ 当 $i \neq j$(投影互斥)

$P_1 + \cdots + P_k = I$(完备性)

$P_i^2 = P_i = P_i^*$(正交投影的性质)

证明:

取 $V$ 的标准正交基由特征向量组成。对于任意 $v \in V$,分解为 $v = v_1 + \cdots + v_k$,其中 $v_i \in E_i$。

则 $Tv = \lambda_1 v_1 + \cdots + \lambda_k v_k = \lambda_1 P_1 v + \cdots + \lambda_k P_k v$。

所以 $T = \sum_{i=1}^k \lambda_i P_i$。

性质 1-3 由正交投影的定义和特征空间的正交性可得。$\square$

物理直觉:谱分解将算子分解为"纯频率"成分的加权和。每个投影 $P_i$ 提取一个特征空间的分量,权重 $\lambda_i$ 是该分量的"强度"。这类似于傅里叶级数将周期函数分解为正弦波的加权和。

例 7.1:谱分解的计算

设 $A = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix}$。

特征值:$\lambda_1 = 1$,$\lambda_2 = 3$。

对应的单位特征向量:$v_1 = \frac{1}{\sqrt{2}}(1, -1)^T$,$v_2 = \frac{1}{\sqrt{2}}(1, 1)^T$。

投影算子:

$$P_1 = v_1 v_1^T = \frac{1}{2}\begin{pmatrix} 1 & -1 \\ -1 & 1 \end{pmatrix}$$

$$P_2 = v_2 v_2^T = \frac{1}{2}\begin{pmatrix} 1 & 1 \\ 1 & 1 \end{pmatrix}$$

验证:

$$A = 1 \cdot P_1 + 3 \cdot P_2 = \frac{1}{2}\begin{pmatrix} 1 & -1 \\ -1 & 1 \end{pmatrix} + \frac{3}{2}\begin{pmatrix} 1 & 1 \\ 1 & 1 \end{pmatrix} = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix}$$

7.3 正规算子

定义 7.2(正规算子)

设 $T: V \to V$ 是线性算子。如果 $TT^ = T^T$,则称 $T$ 是正规(Normal)算子。

例 7.2:正规算子的例子

自伴算子:$T = T^$,显然 $TT^ = T^2 = T^*T$。

反自伴算子:$T^ = -T$,则 $TT^ = -T^2 = T^*T$。

酉算子:$T^ = T^{-1}$,则 $TT^ = I = T^*T$。

旋转矩阵:在 $\mathbb{R}^2$ 中,$\begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}$ 是正交矩阵,因此是正规的。

定理 7.6(正规算子的谱定理)

设 $T$ 是正规算子。则存在 $V$ 的标准正交基由 $T$ 的特征向量组成。

等价地,存在酉矩阵 $U$ 和对角矩阵 $D$(可能是复数)使得:

$$T = UDU^*$$

证明思路:

关键引理:对于正规算子,$\|Tv\| = \|T^v\|$。由此可证 $T$ 和 $T^$ 有相同的特征向量。

然后类似自伴算子的证明,使用归纳法和不变子空间。$\square$

重要推论:正规算子可酉对角化。自伴算子、酉算子、反自伴算子都是正规算子的特例。

定理 7.7:正规算子的特征向量性质

设 $T$ 是正规算子,$\lambda$ 是特征值,$v$ 是对应的特征向量。则 $v$ 也是 $T^*$ 的特征向量,对应特征值 $\overline{\lambda}$。

证明:

考虑 $\|(T - \lambda I)v\| = 0$。由于 $T$ 正规,$(T - \lambda I)$ 也正规。

对于正规算子 $S$,有 $\|Sv\| = \|S^v\|$。所以 $\|(T^ - \overline{\lambda}I)v\| = 0$,即 $T^*v = \overline{\lambda}v$。$\square$

7.4 酉算子和正交算子

定义 7.3(酉算子)

设 $V$ 是复内积空间,$U: V \to V$ 是线性算子。如果 $U^U = I$(即 $U^ = U^{-1}$),则称 $U$ 是酉(Unitary)算子。

在实情况下,称为正交(Orthogonal)算子,满足 $Q^TQ = I$。

定理 7.8:酉算子的等价条件

以下条件等价:

$U$ 是酉算子

$\langle Uv, Uw \rangle = \langle v, w \rangle$ 对所有 $v, w$(保持内积)

$\|Uv\| = \|v\|$ 对所有 $v$(保持范数 / 等距)

$U$ 将标准正交基映射为标准正交基

$U$ 的列(在标准正交基下)构成标准正交基

证明:

$(1) \implies (2)$:$\langle Uv, Uw \rangle = \langle v, U^*Uw \rangle = \langle v, w \rangle$

$(2) \implies (3)$:取 $v = w$

$(3) \implies (2)$:由极化恒等式(Polarization Identity)

$(2) \iff (4)$:显然

$(4) \iff (5)$:矩阵表示的直接推论 $\square$

几何直觉:酉算子对应旋转和反射,保持向量的长度和夹角不变。在 $\mathbb{R}^2$ 中,正交矩阵对应旋转或反射;在 $\mathbb{R}^3$ 中,对应绕某轴的旋转或关于某平面的反射。

定理 7.9:酉算子的特征值的模为 1

设 $U$ 是酉算子,$\lambda$ 是特征值。则 $|\lambda| = 1$。

证明:

设 $Uv = \lambda v$,$\|v\| = 1$。则:

$$1 = \|v\|^2 = \|Uv\|^2 = \|\lambda v\|^2 = |\lambda|^2 \|v\|^2 = |\lambda|^2$$

所以 $|\lambda| = 1$。$\square$

几何解释:在复平面上,酉算子的特征值位于单位圆上。对于旋转矩阵 $\begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}$,特征值为 $e^{\pm i\theta}$,模为 1。

定理 7.10:正交矩阵的行列式为 ±1

设 $Q$ 是正交矩阵。则 $\det(Q) = \pm 1$。

证明:

$Q^T Q = I \implies \det(Q^T)\det(Q) = 1 \implies (\det Q)^2 = 1 \implies \det Q = \pm 1$。$\square$

几何意义:$\det Q = 1$ 对应纯旋转(保持定向),$\det Q = -1$ 对应包含反射的变换(反转定向)。

7.5 极分解

定理 7.11(极分解)

设 $T: V \to V$ 是线性算子。则存在酉算子 $U$ 和正半定自伴算子 $P$ 使得:

$$T = UP$$

其中 $P = \sqrt{T^T}$($T^T$ 的唯一正半定平方根)。

如果 $T$ 可逆,则 $U$ 唯一。

类比:这类似于复数的极坐标表示 $z = re^{i\theta}$,其中 $r = |z|$ 是模长,$e^{i\theta}$ 是相位。这里 $P$ 类比模长,$U$ 类比相位。

例 7.3:矩阵的极分解

设 $A = \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix}$。

$A^TA = \begin{pmatrix} 1 & 0 \\ 1 & 1 \end{pmatrix}\begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix} = \begin{pmatrix} 1 & 1 \\ 1 & 2 \end{pmatrix}$

计算 $P = \sqrt{A^TA}$(需要特征分解),然后 $U = AP^{-1}$。

计算过程:

$A^TA$ 的特征值:$\lambda = \frac{3 \pm \sqrt{5}}{2}$

对应的单位特征向量构成 $V$,则 $A^TA = VDV^T$,$P = V\sqrt{D}V^T$。

$U = AP^{-1}$ 是正交矩阵。

7.6 奇异值分解(SVD)

定理 7.12(SVD)

设 $A$ 是 $m \times n$ 矩阵(可以是复数,可以是非方阵)。则存在:

  • 酉矩阵 $U$($m \times m$)
  • 酉矩阵 $V$($n \times n$)
  • "对角"矩阵 $\Sigma$($m \times n$),对角元 $\sigma_1 \geq \sigma_2 \geq \cdots \geq 0$

使得:

$$A = U\Sigma V^*$$

$\sigma_i$ 称为奇异值(Singular Values),$U$ 的列称为左奇异向量,$V$ 的列称为右奇异向量。

证明思路:

$A^A$ 是 $n \times n$ 半正定自伴矩阵,有特征分解 $A^A = VDV^*$,其中 $D = \text{diag}(\lambda_1, \ldots, \lambda_n)$,$\lambda_i \geq 0$。

定义 $\sigma_i = \sqrt{\lambda_i}$,$\Sigma = \text{diag}(\sigma_1, \ldots, \sigma_r, 0, \ldots)$。

构造 $U$ 的列为 $u_i = \frac{1}{\sigma_i}Av_i$(对 $\sigma_i > 0$),补充正交向量使 $U$ 成为酉矩阵。

验证 $A = U\Sigma V^*$。$\square$

重要意义:SVD 是特征分解的推广,适用于任意矩阵。它是数据分析、图像压缩、推荐系统的核心工具。

定理 7.13:奇异值的性质

奇异值是唯一的(按降序排列)

$\sigma_i = \sqrt{\lambda_i(A^A)} = \sqrt{\lambda_i(AA^)}$

$\text{rank}(A) = $ 非零奇异值的个数

$\|A\|_2 = \sigma_1$(谱范数,最大奇异值)

$\|A\|_F = \sqrt{\sum \sigma_i^2}$(Frobenius 范数)

条件数 $\kappa(A) = \sigma_1 / \sigma_r$($r = \text{rank}(A)$)

几何解释

SVD 揭示了任意线性变换的本质结构:

第一步:$V^*$ 将输入空间旋转/反射(酉变换,保持长度)

第二步:$\Sigma$ 沿坐标轴缩放(可能降维,如果 $m \neq n$)

第三步:$U$ 将结果旋转/反射到输出空间

因此,任意线性变换都可以看作"旋转-缩放-旋转"的组合。

直观理解:想象将一个球体经过线性变换变成椭球体。SVD 告诉我们:先旋转球体,然后沿坐标轴拉伸成椭球,最后再旋转一次。拉伸的倍数就是奇异值,拉伸的方向就是奇异向量。

定理 7.14(Eckart-Young 定理)

设 $A = U\Sigma V^$ 是 SVD。定义 $A_k = \sum_{i=1}^k \sigma_i u_i v_i^$(保留前 $k$ 个奇异值)。则:

$$\min_{\text{rank}(B) \leq k} \|A - B\|_2 = \sigma_{k+1}$$

且 $A_k$ 是最优解。

这里 $\|\cdot\|_2$ 是谱范数(最大奇异值)。

重要意义:SVD 提供了最优的低秩近似。这在数据压缩、去噪、降维中有广泛应用。例如,在图像压缩中,保留前几个奇异值可以大幅减少存储空间,同时保持图像的主要特征。


三、程序员的视角

3.1 在机器学习中的应用

主成分分析(PCA):协方差矩阵是对称矩阵,谱定理保证它可以正交对角化。主成分是特征向量,方差是特征值。PCA 用于降维、可视化、去噪。

奇异值分解(SVD):用于降维、去噪、推荐系统。截断 SVD 保留前 $k$ 个奇异值,实现低秩近似。在自然语言处理中,SVD 用于潜在语义分析(LSA)。

谱聚类:构建数据图的拉普拉斯矩阵(对称半正定),计算其特征向量,用特征向量作为新特征进行聚类。这种方法能捕捉数据的非线性结构,特别适用于传统 K-means 难以处理的复杂形状簇。

神经网络初始化:正交初始化使用权重矩阵保持正交性,有助于梯度流动,避免梯度消失或爆炸。

矩阵补全:在推荐系统中,用户-物品评分矩阵通常是稀疏的。通过低秩 SVD 近似,可以预测缺失的评分。

3.2 常见陷阱与误区

误区 1:混淆特征值与奇异值

特征值针对方阵,可能为复数;奇异值针对任意矩阵,总是非负实数。对称矩阵的特征值绝对值等于奇异值。

误区 2:认为 SVD 是特征分解

SVD 分解的是 $A = U\Sigma V^*$,不是 $A = UDU^{-1}$。$U$ 和 $V$ 一般不同。只有在 $A$ 是对称正定时,SVD 才等同于特征分解。

误区 3:忽略数值稳定性

直接计算 $A^TA$ 然后求特征值可能数值不稳定。实际使用 bidiagonalization 和 QR 迭代。NumPy 的 np.linalg.svd 使用 LAPACK 的稳定算法。

误区 4:认为所有矩阵都可对角化

只有正规矩阵可酉对角化。一般矩阵只能三角化(Schur 分解)。但 SVD 总是存在。

误区 5:忽视奇异值的衰减速度

奇异值衰减快意味着矩阵接近低秩,适合压缩。如果奇异值衰减慢,低秩近似效果差。

3.3 与其他层级的联系

  • 与特征值的联系:SVD 的奇异值是 $A^*A$ 的特征值的平方根
  • 与最小二乘法的联系:SVD 提供了求解最小二乘问题的稳定方法
  • 与伪逆的联系:$A^+ = V\Sigma^+ U^*$,其中 $\Sigma^+$ 将非零奇异值取倒数
  • 与条件数的联系:条件数 $\kappa(A) = \sigma_1 / \sigma_r$
  • 与谱定理的联系:SVD 可以看作非方阵的"谱分解"

四、代码实战

7.1 对称矩阵的谱分解

python
import numpy as np

def spectral_decomposition(A):
    """
    对称矩阵的谱分解
    
    参数:
    A: 对称矩阵
    
    返回:
    eigenvalues: 特征值
    eigenvectors: 正交特征向量矩阵
    """
    # 使用 eigh 专门处理对称/Hermitian 矩阵
    eigenvalues, eigenvectors = np.linalg.eigh(A)
    
    return eigenvalues, eigenvectors

# 示例
A = np.array([[2, 1, 0],
              [1, 3, 1],
              [0, 1, 2]])

# 确保对称
A = (A + A.T) / 2

eigenvalues, eigenvectors = spectral_decomposition(A)
print("特征值:", eigenvalues)
print("特征向量矩阵:")
print(eigenvectors)

# 验证:A = QDQ^T
D = np.diag(eigenvalues)
Q = eigenvectors
A_reconstructed = Q @ D @ Q.T
print("\n重构误差:", np.linalg.norm(A - A_reconstructed))

# 验证正交性
print("Q^T Q:")
print(Q.T @ Q)  # 应接近单位矩阵

# 谱分解:A = sum(lambda_i * P_i)
print("\n谱分解验证:")
A_spectral = np.zeros_like(A)
for i in range(len(eigenvalues)):
    v = eigenvectors[:, i:i+1]  # 列向量
    P_i = v @ v.T  # 投影矩阵
    A_spectral += eigenvalues[i] * P_i
    print(f"λ_{i+1} = {eigenvalues[i]:.4f}, P_{i+1}:")
    print(P_i.round(4))

print("\n谱分解重构误差:", np.linalg.norm(A - A_spectral))

7.2 奇异值分解

python
import numpy as np
import matplotlib.pyplot as plt

def compute_svd(A):
    """
    计算 SVD
    
    参数:
    A: m x n 矩阵
    
    返回:
    U: m x m 酉矩阵
    Sigma: 奇异值数组
    Vt: n x n 酉矩阵的转置
    """
    U, Sigma, Vt = np.linalg.svd(A, full_matrices=True)
    return U, Sigma, Vt

# 示例
A = np.array([[1, 2, 3],
              [4, 5, 6]])

U, Sigma, Vt = compute_svd(A)
print("U:")
print(U)
print("\n奇异值:", Sigma)
print("Vt:")
print(Vt)

# 重构
Sigma_matrix = np.zeros(A.shape)
np.fill_diagonal(Sigma_matrix, Sigma)
A_reconstructed = U @ Sigma_matrix @ Vt
print("\n重构误差:", np.linalg.norm(A - A_reconstructed))

# 低秩近似
k = 1  # 保留前 k 个奇异值
U_k = U[:, :k]
Sigma_k = np.diag(Sigma[:k])
Vt_k = Vt[:k, :]
A_approx = U_k @ Sigma_k @ Vt_k
print(f"\n秩-{k} 近似:")
print(A_approx)
print(f"秩-{k} 近似误差:", np.linalg.norm(A - A_approx))

# 可视化奇异值
plt.figure(figsize=(10, 6))
plt.bar(range(1, len(Sigma)+1), Sigma, alpha=0.7)
plt.xlabel('Singular Value Index')
plt.ylabel('Singular Value')
plt.title('Singular Values')
plt.grid(True, alpha=0.3)
plt.savefig('/tmp/singular_values.png', dpi=150, bbox_inches='tight')
plt.show()

7.3 极分解

python
import numpy as np

def polar_decomposition(A):
    """
    极分解 A = UP
    
    参数:
    A: 方阵
    
    返回:
    U: 酉矩阵
    P: 正半定自伴矩阵
    """
    # SVD
    U_svd, Sigma, Vt = np.linalg.svd(A)
    
    # P = V Sigma V^*
    V = Vt.conj().T
    P = V @ np.diag(Sigma) @ Vt
    
    # U = U_svd Vt
    U = U_svd @ Vt
    
    return U, P

# 示例
A = np.array([[1, 2],
              [3, 4]])

U, P = polar_decomposition(A)
print("U (酉矩阵):")
print(U)
print("\nP (正半定):")
print(P)

# 验证
A_reconstructed = U @ P
print("\n重构误差:", np.linalg.norm(A - A_reconstructed))

# 验证 U 是酉的
print("U^T U:")
print(U.T @ U)  # 应接近单位矩阵

# 验证 P 是对称正半定的
print("P 的特征值:", np.linalg.eigvalsh(P))  # 应全为非负

7.4 SVD 在图像压缩中的应用

python
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

# 读取图像(灰度)
# 创建一个示例图像
np.random.seed(42)
image = np.random.rand(200, 300)

# 计算 SVD
U, Sigma, Vt = np.linalg.svd(image, full_matrices=False)

# 不同秩的近似
ranks = [1, 5, 10, 20, 50, 100]

fig, axes = plt.subplots(2, 3, figsize=(15, 10))
axes = axes.flatten()

for idx, k in enumerate(ranks):
    # 低秩近似
    U_k = U[:, :k]
    Sigma_k = np.diag(Sigma[:k])
    Vt_k = Vt[:k, :]
    image_approx = U_k @ Sigma_k @ Vt_k
    
    axes[idx].imshow(image_approx, cmap='gray')
    axes[idx].set_title(f'Rank {k}')
    axes[idx].axis('off')
    
    # 计算压缩率
    original_size = image.size
    compressed_size = k * (U.shape[0] + Vt.shape[1] + 1)
    compression_ratio = original_size / compressed_size
    print(f"Rank {k}: 压缩率 = {compression_ratio:.2f}x, 误差 = {np.linalg.norm(image - image_approx):.2f}")

plt.tight_layout()
plt.savefig('/tmp/image_compression.png', dpi=150, bbox_inches='tight')
plt.show()

# 绘制奇异值衰减
plt.figure(figsize=(10, 6))
plt.plot(Sigma[:50], 'bo-', markersize=4)
plt.xlabel('Singular Value Index')
plt.ylabel('Singular Value')
plt.title('Singular Value Decay')
plt.grid(True, alpha=0.3)
plt.yscale('log')
plt.savefig('/tmp/sv_decay.png', dpi=150, bbox_inches='tight')
plt.show()

7.5 PCA 使用 SVD

python
import numpy as np
import matplotlib.pyplot as plt

def pca_svd(X, n_components=2):
    """
    使用 SVD 实现 PCA
    
    参数:
    X: 数据矩阵(每行是一个样本)
    n_components: 保留的主成分数量
    
    返回:
    components: 主成分(右奇异向量)
    explained_variance: 解释方差(奇异值的平方)
    X_transformed: 降维后的数据
    """
    # 中心化
    X_centered = X - X.mean(axis=0)
    
    # SVD
    U, Sigma, Vt = np.linalg.svd(X_centered, full_matrices=False)
    
    # 主成分是右奇异向量
    components = Vt[:n_components].T
    
    # 解释方差
    explained_variance = Sigma[:n_components]**2 / (X.shape[0] - 1)
    
    # 降维
    X_transformed = X_centered @ components
    
    return components, explained_variance, X_transformed

# 生成示例数据
np.random.seed(42)
mean = [0, 0]
cov = [[2, 1], [1, 1]]
X = np.random.multivariate_normal(mean, cov, 500)

# PCA
components, variance, X_pca = pca_svd(X, n_components=2)

print("主成分:")
print(components)
print("\n解释方差:")
print(variance)
print(f"\n总方差解释比例: {sum(variance) / np.var(X, ddof=1).sum():.2%}")

# 可视化
plt.figure(figsize=(12, 5))

plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], alpha=0.5, label='原始数据')
plt.quiver(0, 0, components[0, 0]*3, components[1, 0]*3, color='r', width=0.005, label='PC1')
plt.quiver(0, 0, components[0, 1]*3, components[1, 1]*3, color='g', width=0.005, label='PC2')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('PCA Components')
plt.legend()
plt.axis('equal')

plt.subplot(1, 2, 2)
plt.scatter(X_pca[:, 0], X_pca[:, 1], alpha=0.5)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('Data in PCA Space')
plt.axis('equal')

plt.tight_layout()
plt.savefig('/tmp/pca_svd.png', dpi=150, bbox_inches='tight')
plt.show()

五、深入思考

5.1 历史背景

谱理论的发展:

  • 19世纪初:Cauchy 研究了二次型的主轴问题,发现了实对称矩阵的特征值都是实数
  • 19世纪中叶:Hermite 证明了 Hermitian 矩阵的特征值是实数
  • 20世纪初:Hilbert 将谱理论推广到无限维空间
  • 1930年代:von Neumann 在量子力学中系统使用了谱定理
  • 1960年代:SVD 被 Golub 和 Kahan 等人发展为实用的数值算法
  • 1970年代:Eckart 和 Young 证明了 SVD 的最优低秩近似性质

5.2 前沿方向

随机矩阵理论:研究大型随机矩阵的谱分布。Wigner 半圆律、Marchenko-Pastur 分布在统计物理、金融、机器学习中应用广泛。例如,在深度学习中,权重矩阵的谱分布影响训练动态和泛化能力。

张量分解:将 SVD 推广到高阶张量,如 Tucker 分解、CP 分解。这在深度学习、信号处理中有重要应用。

非线性谱理论:将谱概念推广到非线性算子,如图神经网络的谱方法。

量子计算:量子相位估计算法可以高效估计酉算子的特征值,这是许多量子算法的核心。

5.3 延伸阅读

Sheldon Axler, Linear Algebra Done Right, 3rd Edition, Springer, 2015 - Chapter 7

Gene H. Golub, Charles F. Van Loan, Matrix Computations, 4th Edition - SVD 的数值算法

Gilbert Strang, Introduction to Linear Algebra, 5th Edition - Chapter 7

3Blue1Brown, "The Essence of Linear Algebra" 关于 SVD 的视频

Lloyd N. Trefethen, David Bau III, Numerical Linear Algebra - 数值线性代数经典


六、实验笔记

实验 1:探索谱定理的几何意义

目标:直观理解自伴算子在正交基下的对角化

步骤:

生成一个随机对称矩阵 $A$

计算其特征值和特征向量

绘制单位圆及其经过 $A$ 变换后的图像(椭圆)

标注特征向量方向(椭圆的主轴)

观察特征值与椭圆轴长的关系

扩展:尝试非对称矩阵,观察变换后的图像不再是正交拉伸。

python
import numpy as np
import matplotlib.pyplot as plt

# 生成对称矩阵
np.random.seed(42)
B = np.random.rand(2, 2)
A = (B + B.T) / 2

# 特征分解
eigenvalues, eigenvectors = np.linalg.eigh(A)

# 绘制单位圆
theta = np.linspace(0, 2*np.pi, 100)
x_circle = np.cos(theta)
y_circle = np.sin(theta)

# 变换后的椭圆
xy_circle = np.vstack([x_circle, y_circle])
xy_ellipse = A @ xy_circle

plt.figure(figsize=(10, 10))
plt.plot(x_circle, y_circle, 'b-', label='Unit Circle', linewidth=2)
plt.plot(xy_ellipse[0], xy_ellipse[1], 'r-', label='Transformed Ellipse', linewidth=2)

# 标注特征向量
for i in range(2):
    v = eigenvectors[:, i]
    plt.arrow(0, 0, v[0]*eigenvalues[i], v[1]*eigenvalues[i], 
              head_width=0.1, head_length=0.1, fc='green', ec='green', 
              linewidth=2, label=f'λ={eigenvalues[i]:.2f}')

plt.xlabel('x')
plt.ylabel('y')
plt.title('Spectral Theorem: Circle to Ellipse')
plt.legend()
plt.grid(True, alpha=0.3)
plt.axis('equal')
plt.savefig('/tmp/spectral_geometry.png', dpi=150, bbox_inches='tight')
plt.show()

实验 2:SVD 在图像压缩中的应用

目标:理解 SVD 如何实现低秩近似和数据压缩

步骤:

读取一张灰度图像(作为矩阵)

计算 SVD

用前 $k$ 个奇异值重构图像($k = 1, 5, 10, 50, 100$)

比较重构图像的质量和压缩率

分析奇异值的衰减速度

挑战:扩展到彩色图像(对每个通道分别做 SVD,或使用张量分解)。

实验 3:谱聚类实验

目标:理解谱聚类如何利用拉普拉斯矩阵的特征向量

步骤:

生成非线性可分的数据(如同心圆、月牙形)

构建相似度图和拉普拉斯矩阵

计算拉普拉斯矩阵的前几个特征向量

用特征向量作为新特征进行 K-means 聚类

与传统 K-means 比较效果


七、本章小结

本章研究了内积空间上线性算子的谱理论,核心内容包括:

核心概念:

  • 自伴算子满足 $T = T^*$,特征值为实数,特征向量可选为正交的
  • 正规算子满足 $TT^ = T^T$,可酉对角化
  • 谱分解将算子表示为正交投影的加权和
  • 酉算子保持内积和范数,特征值的模为 1
  • 极分解类比复数的极坐标表示
  • SVD 是特征分解的推广,适用于任意矩阵

关键定理:

  • 实谱定理:实对称矩阵可正交对角化
  • 复谱定理:Hermitian 矩阵可酉对角化
  • 正规算子的谱定理
  • SVD 定理
  • Eckart-Young 定理:SVD 提供最优低秩近似

几何直觉:

  • 自伴算子对应沿正交方向的独立缩放
  • 酉算子对应旋转和反射
  • SVD 将任意变换分解为旋转-缩放-旋转
  • 谱分解是将算子分解为"纯频率"成分

编程实践:

  • 用 np.linalg.eigh 计算对称矩阵的特征分解
  • 用 np.linalg.svd 计算 SVD
  • 实现极分解和低秩近似
  • SVD 在图像压缩和 PCA 中的应用

应用领域:

  • 机器学习:PCA、谱聚类、推荐系统
  • 图像处理:压缩、去噪
  • 物理学:量子力学、振动分析
  • 工程学:结构分析、信号处理

谱定理是线性代数的巅峰,下一章我们将进一步研究复向量空间上的算子。


八、习题

基础题

判断下列矩阵是否自伴、正规、酉:

- (a) $\begin{pmatrix} 1 & i \\ -i & 1 \end{pmatrix}$

- (b) $\begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}$

- (c) $\frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\ -1 & 1 \end{pmatrix}$

对矩阵 $\begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix}$ 进行谱分解,验证 $A = \sum \lambda_i P_i$。

计算矩阵 $\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}$ 的 SVD,并验证重构。

证明:如果 $U$ 是酉算子,则 $\|U\| = 1$。进一步,证明 $U$ 保持所有向量间的距离。

进阶题

设 $A$ 是 $m \times n$ 矩阵。证明:$A$ 和 $A^*$ 有相同的非零奇异值。进一步,证明它们的奇异向量之间的关系。

设 $T$ 是正规算子。证明:$\|Tv\| = \|T^v\|$ 对所有 $v$。进一步,证明 $T$ 和 $T^$ 有相同的特征向量。

设 $A = U\Sigma V^$ 是 SVD。证明:$A^+ = V\Sigma^+ U^$ 是 Moore-Penrose 伪逆,并验证四个 Penrose 条件。

设 $A$ 是 $n \times n$ 矩阵。证明:$\det(A^*A) = \prod_{i=1}^n \sigma_i^2$,其中 $\sigma_i$ 是奇异值。进一步,证明 $|\det(A)| = \prod_{i=1}^n \sigma_i$。

挑战题

证明:任意方阵 $A$ 可以分解为 $A = H + iK$,其中 $H$ 和 $K$ 是 Hermitian 矩阵。(Cartesian 分解)进一步,证明 $A$ 是正规的当且仅当 $HK = KH$。

设 $A$ 是 $m \times n$ 矩阵,$\sigma_1 \geq \cdots \geq \sigma_r > 0$ 是非零奇异值。证明:秩-$k$ 矩阵中,$A_k = \sum_{i=1}^k \sigma_i u_i v_i^*$ 是最优近似(Eckart-Young 定理)。提示:使用 von Neumann 迹不等式。

7/9有限维向
0%