第5章 特征值与特征向量 - 线性变换的本质 (Eigenvalues and Eigenvectors)
一、导读
5.1 本章学习目标
通过本章的学习,你将能够:
理解特征值和特征向量的定义:掌握 $Tv = \lambda v$ 的几何意义,理解特征向量是线性变换的"不变方向"
掌握特征多项式的计算:理解特征值是特征多项式的零点,能够在小规模问题上手工计算
理解特征空间的结构:掌握特征空间是子空间,理解其维度(几何重数)的含义
掌握对角化的条件:理解什么情况下线性算子可以用对角矩阵表示,以及对角化的好处
理解不变子空间的概念:掌握特征空间是不变子空间,理解其在算子分解中的作用
掌握迹和行列式与特征值的关系:理解 $\text{tr}(T) = \sum \lambda_i$ 和 $\det(T) = \prod \lambda_i$
将特征值理论应用于实际问题:如马尔可夫链、振动分析、主成分分析
5.2 为什么本章如此重要
特征值和特征向量是线性代数中最深刻的概念之一。它们揭示了线性变换的"本质结构"——在任何线性变换中,总有一些特殊的方向保持不变(只被缩放),这些方向就是特征向量,缩放因子就是特征值。
从理论的角度看,特征值理论是谱分析的基础。通过将线性算子分解为特征空间的直和,我们可以将复杂的变换简化为独立的缩放操作。这种分解思想贯穿整个现代数学。
从应用的角度看:
- 物理学:量子力学中的可观测量对应自伴算子的特征值;经典力学中的主惯性轴是惯性张量的特征向量
- 工程学:结构振动的固有频率是特征值,振型是特征向量
- 计算机科学:PageRank 算法基于转移矩阵的主特征向量;图像压缩使用 SVD(奇异值分解)
- 数据科学:PCA 的核心是协方差矩阵的特征分解;谱聚类使用图拉普拉斯矩阵的特征向量
- 经济学:投入产出模型的稳定性由特征值决定;Leontief 模型使用特征值分析
从认知的角度看,本章帮助你建立"谱思维"。不再将线性变换视为整体的矩阵,而是看作在特定方向上的独立缩放。这种分解视角是理解复杂系统的关键。
5.3 核心问题引导
在学习本章时,请持续思考以下问题:
什么是"不变方向"? 为什么线性变换总会有某些方向只被缩放而不改变方向?这在几何上意味着什么?
特征值一定是实数吗? 在实向量空间中,特征值可能是复数吗?如何处理这种情况?
特征空间和特征值有什么关系? 每个特征值对应一个特征空间,这个空间的维度有什么意义?
什么情况下可以对角化? 为什么有些矩阵不能对角化?Jordan 标准形是如何处理这种情况的?
特征值的代数重数和几何重数有什么区别? 为什么几何重数不超过代数重数?
如何高效计算特征值? 对于大规模矩阵,直接求解特征多项式不可行,有哪些数值方法?
特征值理论与多项式理论有何联系? 最小多项式、特征多项式与特征值之间有什么关系?
二、核心概念详解
5.1 特征值和特征向量的定义
定义 5.1(特征值和特征向量)
设 $T: V \to V$ 是线性算子,$\lambda \in \mathbb{F}$。如果存在非零向量 $v \in V$ 使得:
$$Tv = \lambda v$$
则称 $\lambda$ 是 $T$ 的特征值(Eigenvalue),$v$ 是对应于 $\lambda$ 的特征向量(Eigenvector)。
关键洞察:特征向量是被 $T$ 映射到自身标量倍数的向量。换句话说,特征向量的方向在变换后保持不变(或反向,如果 $\lambda < 0$),只是长度被缩放了 $\lambda$ 倍。
例 5.1:基本例子
恒等算子:$Iv = v = 1 \cdot v$。唯一特征值是 $1$,所有非零向量都是特征向量。
零算子:$0v = 0 = 0 \cdot v$。唯一特征值是 $0$,所有非零向量都是特征向量。
缩放算子:$Tv = \lambda v$。唯一特征值是 $\lambda$,所有非零向量都是特征向量。
投影算子:$P: \mathbb{R}^3 \to \mathbb{R}^3$,$P(x, y, z) = (x, y, 0)$(投影到 $xy$ 平面)。
- 特征值 $1$:特征向量是 $xy$ 平面中的非零向量(投影后不变)
- 特征值 $0$:特征向量是 $z$ 轴上的非零向量(投影后变为零)
旋转算子:$T: \mathbb{R}^2 \to \mathbb{R}^2$,旋转 $90^\circ$。在 $\mathbb{R}$ 上没有特征值(没有实方向保持不变)。在 $\mathbb{C}$ 上有特征值 $\pm i$。
剪切变换:$T: \mathbb{R}^2 \to \mathbb{R}^2$,$T(x, y) = (x + y, y)$。矩阵表示为 $\begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix}$。
- 特征多项式:$(1-\lambda)^2 = 0$,唯一特征值 $\lambda = 1$(代数重数为2)
- 特征空间:$(T - I)v = 0 \implies \begin{pmatrix} 0 & 1 \\ 0 & 0 \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix} = 0 \implies y = 0$
- 特征向量为 $t(1, 0)^T$,几何重数为1
几何直觉:剪切变换将平面沿水平方向"推挤",只有水平方向的向量保持方向不变。垂直方向的向量会被倾斜,因此不是特征向量。
定理 5.1:特征值的等价条件
设 $T: V \to V$ 是线性算子,$\lambda \in \mathbb{F}$。以下条件等价:
$\lambda$ 是 $T$ 的特征值
$T - \lambda I$ 不是单射
$\text{null}(T - \lambda I) \neq \{0\}$
$T - \lambda I$ 不可逆(当 $V$ 有限维时)
$\det(T - \lambda I) = 0$(当 $V$ 有限维时)
证明:
$(1) \iff (3)$:$\lambda$ 是特征值 $\iff$ 存在 $v \neq 0$ 使得 $Tv = \lambda v \iff$ 存在 $v \neq 0$ 使得 $(T - \lambda I)v = 0 \iff \text{null}(T - \lambda I) \neq \{0\}$
$(3) \iff (2)$:由定理 3.4,线性映射是单射当且仅当核为零。
$(2) \iff (4)$:在有限维空间中,单射、满射、可逆等价。
$(4) \iff (5)$:矩阵不可逆当且仅当其行列式为零。$\square$
5.2 特征空间
定义 5.2(特征空间)
设 $T: V \to V$ 是线性算子,$\lambda$ 是 $T$ 的特征值。特征空间(Eigenspace)定义为:
$$E_\lambda = \text{null}(T - \lambda I) = \{v \in V : Tv = \lambda v\}$$
即对应于 $\lambda$ 的所有特征向量加上零向量的集合。
定理 5.2:特征空间是子空间
$E_\lambda$ 是 $V$ 的子空间,且是 $T$ 的不变子空间。
证明:
- $E_\lambda = \text{null}(T - \lambda I)$,零空间是子空间(定理 3.2)。
- 不变性:如果 $v \in E_\lambda$,则 $Tv = \lambda v \in E_\lambda$(因为 $T(\lambda v) = \lambda Tv = \lambda^2 v = \lambda(\lambda v)$)。所以 $T(E_\lambda) \subseteq E_\lambda$。$\square$
几何直觉:特征空间是所有沿同一方向缩放的向量的集合。在这个子空间内,$T$ 的作用仅仅是缩放。想象一个三维空间中的拉伸变换,沿着某个轴的拉伸不会改变该轴上向量的方向,只会改变它们的长度。
定义 5.3(几何重数)
特征值 $\lambda$ 的几何重数(Geometric Multiplicity)定义为:
$$\text{geom mult}(\lambda) = \dim E_\lambda = \dim \text{null}(T - \lambda I)$$
即特征空间的维度。
5.3 特征多项式
定理 5.3:特征值与行列式
设 $V$ 是有限维向量空间,$\dim V = n$,$T: V \to V$ 是线性算子。$\lambda \in \mathbb{F}$ 是 $T$ 的特征值当且仅当:
$$\det(T - \lambda I) = 0$$
证明:由定理 5.1,$\lambda$ 是特征值 $\iff T - \lambda I$ 不可逆 $\iff \det(T - \lambda I) = 0$。$\square$
定义 5.4(特征多项式)
设 $T: V \to V$ 是线性算子,$\dim V = n$。$T$ 的特征多项式(Characteristic Polynomial)定义为:
$$p_T(z) = \det(T - zI)$$
这是一个次数为 $n$ 的多项式,其特征值是 $p_T$ 的零点。
注意:在某些教材中,特征多项式定义为 $\det(zI - T)$,这与我们定义的差一个符号 $(-1)^n$,但零点相同。
例 5.2:计算特征多项式
设 $A = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix}$。
$$p_A(z) = \det(A - zI) = \det\begin{pmatrix} 2-z & 1 \\ 1 & 2-z \end{pmatrix} = (2-z)^2 - 1 = z^2 - 4z + 3 = (z-1)(z-3)$$
特征值为 $\lambda_1 = 1$,$\lambda_2 = 3$。
对于 $\lambda_1 = 1$:
$$(A - I)v = 0 \implies \begin{pmatrix} 1 & 1 \\ 1 & 1 \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix} = 0 \implies x + y = 0$$
特征向量为 $t(1, -1)^T$,特征空间 $E_1 = \text{span}((1, -1))$,几何重数为 1。
对于 $\lambda_2 = 3$:
$$(A - 3I)v = 0 \implies \begin{pmatrix} -1 & 1 \\ 1 & -1 \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix} = 0 \implies -x + y = 0$$
特征向量为 $t(1, 1)^T$,特征空间 $E_3 = \text{span}((1, 1))$,几何重数为 1。
例 5.3:三阶矩阵的特征多项式
设 $A = \begin{pmatrix} 1 & 2 & 0 \\ 0 & 3 & 1 \\ 1 & 0 & 2 \end{pmatrix}$。
$$p_A(z) = \det(A - zI) = \det\begin{pmatrix} 1-z & 2 & 0 \\ 0 & 3-z & 1 \\ 1 & 0 & 2-z \end{pmatrix}$$
展开得:
$$p_A(z) = (1-z)\det\begin{pmatrix} 3-z & 1 \\ 0 & 2-z \end{pmatrix} - 2\det\begin{pmatrix} 0 & 1 \\ 1 & 2-z \end{pmatrix}$$
$$= (1-z)(3-z)(2-z) - 2(-(1))$$
$$= (1-z)(6 - 5z + z^2) + 2$$
$$= 6 - 5z + z^2 - 6z + 5z^2 - z^3 + 2$$
$$= -z^3 + 6z^2 - 11z + 8$$
求根可得特征值。
5.4 代数重数
定义 5.5(代数重数)
设 $\lambda$ 是 $T$ 的特征值。$\lambda$ 的代数重数(Algebraic Multiplicity)定义为它作为特征多项式 $p_T(z)$ 的零点的重数。
即,如果 $p_T(z) = (z - \lambda)^m q(z)$,其中 $q(\lambda) \neq 0$,则 $\text{alg mult}(\lambda) = m$。
定理 5.4:几何重数不超过代数重数
设 $\lambda$ 是 $T$ 的特征值。则:
$$\text{geom mult}(\lambda) \leq \text{alg mult}(\lambda)$$
证明思路:
设 $\dim E_\lambda = k$。取 $E_\lambda$ 的基 $v_1, \ldots, v_k$,扩展为 $V$ 的基 $v_1, \ldots, v_k, u_1, \ldots, u_{n-k}$。
在这个基下,$T$ 的矩阵表示为分块上三角形式:
$$[T] = \begin{pmatrix} \lambda I_k & * \\ 0 & B \end{pmatrix}$$
其中 $I_k$ 是 $k \times k$ 单位矩阵,$B$ 是 $(n-k) \times (n-k)$ 矩阵。
特征多项式为:
$$p_T(z) = \det([T] - zI) = \det\begin{pmatrix} (\lambda - z)I_k & * \\ 0 & B - zI_{n-k} \end{pmatrix} = (\lambda - z)^k \det(B - zI_{n-k})$$
所以 $(z - \lambda)^k$ 整除 $p_T(z)$,即 $\text{alg mult}(\lambda) \geq k = \text{geom mult}(\lambda)$。$\square$
重要推论:如果几何重数等于代数重数对所有特征值成立,则矩阵可对角化。否则,矩阵只能化为 Jordan 标准形。
5.5 对角化
定义 5.6(可对角化)
设 $T: V \to V$ 是线性算子。如果存在 $V$ 的基由 $T$ 的特征向量组成,则称 $T$ 是可对角化(Diagonalizable)的。
等价地,如果存在可逆矩阵 $P$ 和对角矩阵 $D$ 使得 $T = PDP^{-1}$(或在矩阵语言中 $A = PDP^{-1}$),则 $A$ 可对角化。
定理 5.5:可对角化的条件
设 $T: V \to V$ 是线性算子,$\dim V = n$。以下条件等价:
$T$ 可对角化
$V$ 有由 $T$ 的特征向量组成的基
所有特征值的几何重数之和等于 $n$
特征多项式完全分解,且每个特征值的几何重数等于代数重数
证明:
$(1) \iff (2)$:由定义。
$(2) \iff (3)$:如果 $V$ 有由特征向量组成的基,则这些基向量分布在各个特征空间中。设特征值为 $\lambda_1, \ldots, \lambda_k$,对应的几何重数为 $g_1, \ldots, g_k$。则基的大小为 $\sum g_i = n$。
反之,如果 $\sum g_i = n$,取每个特征空间的基,它们的并构成 $V$ 的基(因为不同特征值对应的特征向量线性无关)。
$(3) \iff (4)$:由定理 5.4,$\text{geom mult} \leq \text{alg mult}$。如果 $\sum \text{geom mult} = n$ 且 $\sum \text{alg mult} = n$(特征多项式次数为 $n$),则必须 $\text{geom mult} = \text{alg mult}$ 对所有特征值成立。$\square$
定理 5.6:不同特征值对应的特征向量线性无关
设 $\lambda_1, \ldots, \lambda_k$ 是 $T$ 的不同特征值,$v_i$ 是对应于 $\lambda_i$ 的特征向量。则 $v_1, \ldots, v_k$ 线性无关。
证明:对 $k$ 进行归纳。
- 基础情况:$k = 1$,单个非零向量线性无关。
- 归纳步骤:假设对 $k-1$ 成立。设:
$$c_1 v_1 + \cdots + c_k v_k = 0 \quad \text{(1)}$$
应用 $T$:
$$c_1 \lambda_1 v_1 + \cdots + c_k \lambda_k v_k = 0 \quad \text{(2)}$$
(2) - $\lambda_k \times$ (1):
$$c_1(\lambda_1 - \lambda_k)v_1 + \cdots + c_{k-1}(\lambda_{k-1} - \lambda_k)v_{k-1} = 0$$
由归纳假设,$v_1, \ldots, v_{k-1}$ 线性无关,所以 $c_i(\lambda_i - \lambda_k) = 0$。由于 $\lambda_i \neq \lambda_k$,得 $c_i = 0$($i = 1, \ldots, k-1$)。
代入 (1),得 $c_k v_k = 0$,所以 $c_k = 0$。$\square$
推论:如果 $T$ 有 $n$ 个不同的特征值($\dim V = n$),则 $T$ 可对角化。
例 5.4:可对角化与不可对角化
可对角化:$A = \begin{pmatrix} 2 & 0 \\ 0 & 3 \end{pmatrix}$ 已经是对角矩阵,显然可对角化。
不可对角化:$A = \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix}$。
特征多项式:$p_A(z) = (1-z)^2$,唯一特征值 $\lambda = 1$,代数重数为 2。
特征空间:$(A - I)v = 0 \implies \begin{pmatrix} 0 & 1 \\ 0 & 0 \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix} = 0 \implies y = 0$。
特征空间为 $\text{span}((1, 0))$,几何重数为 1 < 代数重数 2。所以不可对角化。
几何解释:这个矩阵表示剪切变换,它将平面沿水平方向推挤。只有水平方向的向量保持方向不变,因此只有一个线性无关的特征向量。无法找到两个线性无关的特征向量来构成 $\mathbb{R}^2$ 的基,所以不可对角化。
5.6 迹和行列式
定理 5.7:迹与特征值的关系
设 $T: V \to V$ 是线性算子,$\dim V = n$,特征值为 $\lambda_1, \ldots, \lambda_n$(计重数)。则:
$$\text{tr}(T) = \lambda_1 + \lambda_2 + \cdots + \lambda_n$$
证明:特征多项式 $p_T(z) = \det(T - zI)$ 展开后,$z^{n-1}$ 的系数为 $(-1)^{n-1}\text{tr}(T)$。另一方面,$p_T(z) = (-1)^n(z - \lambda_1)\cdots(z - \lambda_n)$,展开后 $z^{n-1}$ 的系数为 $(-1)^{n-1}(\lambda_1 + \cdots + \lambda_n)$。比较得结论。$\square$
定理 5.8:行列式与特征值的关系
$$\det(T) = \lambda_1 \lambda_2 \cdots \lambda_n$$
证明:$p_T(0) = \det(T)$。另一方面,$p_T(0) = (-1)^n(-\lambda_1)\cdots(-\lambda_n) = \lambda_1 \cdots \lambda_n$。$\square$
实用价值:这两个定理提供了快速验证特征值计算正确性的方法。如果计算出的特征值之和不等于迹,或者乘积不等于行列式,则计算有误。
5.7 不变子空间
定义 5.7(不变子空间)
设 $T: V \to V$ 是线性算子,$U$ 是 $V$ 的子空间。如果 $T(U) \subseteq U$,则称 $U$ 是 $T$ 的不变子空间(Invariant Subspace)。
定理 5.9:特征空间是不变子空间
设 $\lambda$ 是 $T$ 的特征值,$E_\lambda$ 是对应的特征空间。则 $E_\lambda$ 是 $T$ 的不变子空间。
证明:如果 $v \in E_\lambda$,则 $Tv = \lambda v \in E_\lambda$。所以 $T(E_\lambda) \subseteq E_\lambda$。$\square$
重要性:不变子空间允许我们将线性算子"限制"在更小的子空间上研究,从而简化问题。特征空间是最简单的不变子空间,因为在其上 $T$ 的作用仅仅是缩放。
三、程序员的视角
3.1 在机器学习中的应用
主成分分析(PCA):PCA 的核心是计算协方差矩阵的特征值和特征向量。最大特征值对应的特征向量是第一主成分,次大特征值对应第二主成分,依此类推。特征值的大小反映了对应方向上的方差。在实际应用中,我们通常只保留前几个主成分,实现降维和数据压缩。
谱聚类:将数据点构建为图,计算图拉普拉斯矩阵的特征向量,用特征向量作为新的特征表示进行聚类。这种方法能捕捉数据的非线性结构,特别适用于传统 K-means 难以处理的复杂形状簇。
PageRank:Google 的 PageRank 算法本质上是求网页链接矩阵的主特征向量(对应最大特征值的特征向量)。主特征向量的分量表示各网页的重要性。幂迭代法是计算主特征向量的常用方法。
神经网络初始化:权重矩阵的谱性质(特征值分布)影响训练稳定性。Xavier 初始化和 He 初始化都考虑了保持特征值在合理范围内,避免梯度消失或爆炸。
推荐系统:矩阵分解技术(如 SVD)用于提取用户和物品的潜在特征。特征值的大小反映了各潜在因子的重要性。
3.2 常见陷阱与误区
误区 1:认为所有矩阵都可对角化
只有当每个特征值的几何重数等于代数重数时才可对角化。Jordan 块矩阵不可对角化。在实际应用中,即使矩阵理论上可对角化,数值误差也可能导致对角化不稳定。
误区 2:混淆特征值与奇异值
特征值针对方阵,奇异值针对任意矩阵。对称矩阵的特征值等于奇异值的绝对值,但一般矩阵不同。SVD 总是存在,而特征分解不一定存在(对于非方阵或不可对角化矩阵)。
误区 3:忽略数值稳定性
直接计算特征多项式然后求根在数值上不稳定。实际使用 QR 算法、幂迭代等数值方法。对于大规模稀疏矩阵,Lanczos 算法和 Arnoldi 迭代更高效。
误区 4:认为特征值必须是实数
实矩阵可能有复特征值(成共轭对出现)。对称矩阵保证实特征值。在处理实数据时,如果出现复特征值,需要检查矩阵是否对称。
误区 5:忽视特征向量的归一化
特征向量可以任意缩放,但在实际应用中(如 PCA),通常需要归一化为单位向量,以便比较和解释。
3.3 与其他层级的联系
- 与多项式理论的联系:特征值是特征多项式的零点,最小多项式的零点包含所有特征值
- 与内积空间的联系:在内积空间中,自伴算子有实特征值和正交特征向量
- 与 SVD 的联系:SVD 是特征分解的推广,适用于任意矩阵
- 与微分方程的联系:线性微分方程组的稳定性由系数矩阵的特征值决定
- 与图论的联系:图的邻接矩阵和拉普拉斯矩阵的特征值反映了图的结构性质
四、代码实战
5.1 计算特征值和特征向量
import numpy as np
def compute_eigenvalues_and_eigenvectors(A):
"""
计算矩阵的特征值和特征向量
参数:
A: 方阵
返回:
eigenvalues: 特征值数组
eigenvectors: 特征向量矩阵(每列是一个特征向量)
"""
eigenvalues, eigenvectors = np.linalg.eig(A)
return eigenvalues, eigenvectors
# 示例
A = np.array([[2, 1],
[1, 2]])
eigenvalues, eigenvectors = compute_eigenvalues_and_eigenvectors(A)
print("特征值:", eigenvalues)
print("特征向量:")
print(eigenvectors)
# 验证:Av = λv
for i in range(len(eigenvalues)):
v = eigenvectors[:, i]
lam = eigenvalues[i]
Av = A @ v
lam_v = lam * v
print(f"\n验证 λ={lam:.4f}:")
print(f" Av = {Av}")
print(f" λv = {lam_v}")
print(f" 误差: {np.linalg.norm(Av - lam_v):.2e}")5.2 对角化
import numpy as np
def diagonalize(A):
"""
对角化矩阵 A = PDP^{-1}
参数:
A: 方阵
返回:
P: 特征向量矩阵
D: 对角矩阵
"""
eigenvalues, eigenvectors = np.linalg.eig(A)
# 检查是否可对角化(特征向量是否线性无关)
if np.linalg.matrix_rank(eigenvectors) != A.shape[0]:
print("警告:矩阵不可对角化")
P = eigenvectors
D = np.diag(eigenvalues)
return P, D
# 示例
A = np.array([[2, 1],
[1, 2]])
P, D = diagonalize(A)
print("P:")
print(P)
print("\nD:")
print(D)
# 验证:A = PDP^{-1}
P_inv = np.linalg.inv(P)
A_reconstructed = P @ D @ P_inv
print("\n重构的 A:")
print(A_reconstructed)
print(f"\n误差: {np.linalg.norm(A - A_reconstructed):.2e}")
# 利用对角化高效计算矩阵幂
def matrix_power_diagonalized(A, k):
"""使用对角化计算 A^k"""
P, D = diagonalize(A)
D_k = np.diag(D.diagonal() ** k)
return P @ D_k @ np.linalg.inv(P)
A_10 = matrix_power_diagonalized(A, 10)
A_10_direct = np.linalg.matrix_power(A, 10)
print(f"\nA^10 (对角化): {A_10}")
print(f"A^10 (直接): {A_10_direct}")
print(f"误差: {np.linalg.norm(A_10 - A_10_direct):.2e}")5.3 幂迭代法求主特征值
import numpy as np
def power_iteration(A, num_iterations=1000, tol=1e-10):
"""
使用幂迭代法求主特征值(绝对值最大的特征值)
参数:
A: 方阵
num_iterations: 最大迭代次数
tol: 收敛容差
返回:
eigenvalue: 主特征值
eigenvector: 对应的特征向量
"""
n = A.shape[0]
# 随机初始化向量
b = np.random.randn(n)
b = b / np.linalg.norm(b)
eigenvalue_old = 0
for i in range(num_iterations):
# 迭代:b = Ab / ||Ab||
Ab = A @ b
eigenvalue = np.dot(b, Ab) # Rayleigh 商
b_new = Ab / np.linalg.norm(Ab)
# 检查收敛
if abs(eigenvalue - eigenvalue_old) < tol:
break
b = b_new
eigenvalue_old = eigenvalue
return eigenvalue, b
# 示例
A = np.array([[2, 1],
[1, 2]])
eigenvalue, eigenvector = power_iteration(A)
print(f"主特征值: {eigenvalue:.6f}")
print(f"主特征向量: {eigenvector}")
# 与精确解比较
exact_eigenvalues, exact_eigenvectors = np.linalg.eig(A)
print(f"\n精确主特征值: {max(exact_eigenvalues):.6f}")
# 测试大规模矩阵
np.random.seed(42)
B = np.random.rand(100, 100)
B = B + B.T # 使对称
eigenvalue_large, _ = power_iteration(B)
exact_eigenvalues_large = np.linalg.eigvalsh(B)
print(f"\n大规模矩阵主特征值(幂迭代): {eigenvalue_large:.6f}")
print(f"大规模矩阵主特征值(精确): {max(exact_eigenvalues_large):.6f}")5.4 特征值在 PCA 中的应用
import numpy as np
import matplotlib.pyplot as plt
def pca_via_eigen(X, n_components=2):
"""
通过特征分解实现 PCA
参数:
X: 数据矩阵(每行是一个样本)
n_components: 保留的主成分数量
返回:
components: 主成分(特征向量)
explained_variance: 解释方差(特征值)
X_transformed: 降维后的数据
"""
# 中心化
X_centered = X - X.mean(axis=0)
# 计算协方差矩阵
cov_matrix = np.cov(X_centered, rowvar=False)
# 特征分解
eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix)
# 按特征值降序排列
idx = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:, idx]
# 选择前 n_components 个主成分
components = eigenvectors[:, :n_components]
explained_variance = eigenvalues[:n_components]
# 投影到主成分空间
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_via_eigen(X, n_components=2)
print("主成分:")
print(components)
print("\n解释方差:")
print(variance)
print(f"\n总方差解释比例: {sum(variance) / sum(np.linalg.eigvalsh(np.cov(X - X.mean(axis=0), rowvar=False))):.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_eigen.png', dpi=150, bbox_inches='tight')
plt.show()五、深入思考
5.1 历史背景
特征值理论的发展跨越了几个世纪:
- 18世纪:Euler 在研究刚体转动时发现了主惯性轴(特征向量)
- 19世纪初:Cauchy 引入了特征多项式和特征值的概念
- 19世纪中叶:Hermite 证明了实对称矩阵有实特征值
- 20世纪初:Hilbert 将特征值理论推广到无限维空间
- 1960年代:QR 算法的发明使得大规模特征值计算成为可能
- 1990年代:Lanczos 和 Arnoldi 迭代法的发展推动了稀疏矩阵特征值计算
Axler 强调避免过早引入行列式,而是从线性映射的本质出发理解特征值,这种教学方法更符合数学的逻辑结构。
5.2 前沿方向
随机矩阵理论:研究大型随机矩阵的特征值分布。Wigner 半圆律、Marchenko-Pastur 分布在统计物理、金融、机器学习中应用广泛。例如,在深度学习中,权重矩阵的特征值分布影响训练动态。
非线性特征值问题:将特征值理论推广到非线性算子,如张量特征值问题。这在高阶数据分析中有重要应用。
量子计算:量子相位估计算法可以高效估计酉算子的特征值,这是许多量子算法的核心。HHL 算法(Harrow-Hassidim-Lloyd)可以在量子计算机上指数级加速线性方程组求解。
图神经网络:图卷积网络(GCN)使用图拉普拉斯矩阵的特征向量作为基函数,实现图信号处理。谱图理论将傅里叶分析推广到图结构数据。
5.3 延伸阅读
Sheldon Axler, Linear Algebra Done Right, 3rd Edition, Springer, 2015 - Chapter 5
Gilbert Strang, Introduction to Linear Algebra, 5th Edition - Chapter 6
Lloyd N. Trefethen, David Bau III, Numerical Linear Algebra - 特征值计算的数值方法
3Blue1Brown, "The Essence of Linear Algebra" 第13-14集
Gene H. Golub, Charles F. Van Loan, Matrix Computations, 4th Edition - QR 算法和迭代方法
六、实验笔记
实验 1:探索特征值和特征向量的几何意义
目标:直观理解特征向量是"不变方向"
步骤:
选择一个 $2 \times 2$ 矩阵 $A$
计算其特征值和特征向量
在平面上绘制一组向量及其经过 $A$ 变换后的结果
特别标注特征向量,观察它们在变换后只被缩放
尝试不同类型的矩阵(对称、反对称、旋转、剪切),观察特征值的性质
扩展:实现交互式可视化工具,允许用户修改矩阵元素,实时查看特征值和特征向量的变化。使用 Python 的 matplotlib 或 JavaScript 的 D3.js 实现动画效果。
观察要点:
- 对称矩阵的特征向量总是正交的
- 旋转矩阵在实数域中没有特征向量(除非旋转角度为 0 或 180 度)
- 剪切变换只有一个线性无关的特征向量
实验 2:对角化的数值实验
目标:理解对角化的条件和好处
步骤:
生成一个可对角化矩阵和一个不可对角化矩阵
对可对角化矩阵进行对角化 $A = PDP^{-1}$
验证 $A^k = PD^kP^{-1}$,比较直接计算和使用对角化的效率
研究不可对角化矩阵的 Jordan 标准形
分析对角化在计算矩阵函数(如 $e^A$)中的应用
挑战:实现一个函数,判断给定矩阵是否可对角化,并给出理由。检查每个特征值的几何重数是否等于代数重数。
性能比较:
import time
# 生成随机可对角化矩阵
np.random.seed(42)
P = np.random.rand(50, 50)
D = np.diag(np.random.rand(50))
A = P @ D @ np.linalg.inv(P)
# 方法1:直接计算 A^100
start = time.time()
A_100_direct = np.linalg.matrix_power(A, 100)
time_direct = time.time() - start
# 方法2:通过对角化计算
start = time.time()
eigenvalues, eigenvectors = np.linalg.eig(A)
D_100 = np.diag(eigenvalues ** 100)
A_100_diag = eigenvectors @ D_100 @ np.linalg.inv(eigenvectors)
time_diag = time.time() - start
print(f"直接计算时间: {time_direct:.4f}s")
print(f"对角化计算时间: {time_diag:.4f}s")
print(f"误差: {np.linalg.norm(A_100_direct - A_100_diag):.2e}")实验 3:特征值在马尔可夫链中的应用
目标:理解转移矩阵的主特征向量对应稳态分布
步骤:
构造一个简单的马尔可夫链转移矩阵(每列和为1)
计算其特征值和特征向量
验证主特征值为1,对应的特征向量(归一化后)是稳态分布
模拟马尔可夫链的演化,观察是否收敛到稳态分布
import numpy as np
# 三状态马尔可夫链
P = np.array([[0.7, 0.2, 0.1],
[0.2, 0.6, 0.2],
[0.1, 0.3, 0.6]])
# 转置使每列和为1(某些定义使用行和为1)
P = P.T
# 特征分解
eigenvalues, eigenvectors = np.linalg.eig(P)
print("特征值:", eigenvalues)
# 主特征值应为1
idx_main = np.argmax(np.abs(eigenvalues))
main_eigenvalue = eigenvalues[idx_main]
main_eigenvector = eigenvectors[:, idx_main]
# 归一化为概率分布
steady_state = np.real(main_eigenvector / main_eigenvector.sum())
print(f"\n主特征值: {main_eigenvalue}")
print(f"稳态分布: {steady_state}")
# 模拟演化
state = np.array([1/3, 1/3, 1/3])
for i in range(50):
state = P @ state
print(f"模拟50步后: {state}")
print(f"误差: {np.linalg.norm(state - steady_state):.2e}")七、本章小结
本章深入研究了特征值和特征向量理论,核心内容包括:
核心概念:
- 特征值和特征向量满足 $Tv = \lambda v$,特征向量方向在变换后保持不变
- 特征空间是对应同一特征值的所有特征向量的集合,是子空间
- 特征多项式的零点是特征值
- 代数重数是特征值作为零点的重数,几何重数是特征空间的维度
- 不变子空间是在变换下保持封闭的子空间
关键定理:
- 几何重数不超过代数重数
- 不同特征值对应的特征向量线性无关
- 可对角化当且仅当所有特征值的几何重数之和等于维度
- $\text{tr}(T) = \sum \lambda_i$,$\det(T) = \prod \lambda_i$
- 特征空间是不变子空间
几何直觉:
- 特征向量是线性变换的"主轴"
- 特征值描述了沿各主轴的缩放因子
- 对角化意味着找到一组基,使得变换在这组基下只是独立缩放
- 不可对角化的矩阵存在"缺陷",需要用 Jordan 标准形描述
编程实践:
- 用
np.linalg.eig计算特征值和特征向量 - 用幂迭代法求主特征值
- 验证对角化公式
- 在 PCA 中应用特征分解
应用领域:
- 机器学习:PCA、谱聚类、PageRank
- 物理学:量子力学、振动分析
- 工程学:结构分析、控制系统
- 经济学:投入产出模型
特征值理论是线性代数的核心,下一章我们将引入内积,研究更丰富的空间结构。
八、习题
基础题
求矩阵 $\begin{pmatrix} 3 & 1 \\ 0 & 2 \end{pmatrix}$ 的特征值和特征向量,并判断是否可对角化。
证明:如果 $\lambda$ 是 $T$ 的特征值,则 $\lambda^k$ 是 $T^k$ 的特征值,且对应的特征向量相同。
设 $A$ 是 $n \times n$ 矩阵,$\text{tr}(A) = 0$。证明:如果 $A$ 只有一个特征值,则该特征值为 0。
判断下列矩阵是否可对角化,并说明理由:
- (a) $\begin{pmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 3 \end{pmatrix}$
- (b) $\begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{pmatrix}$
- (c) $\begin{pmatrix} 2 & 1 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 3 \end{pmatrix}$
进阶题
设 $T: V \to V$ 是线性算子,$\dim V = n$。证明:如果 $T$ 有 $n$ 个不同的特征值,则 $T$ 可对角化。进一步,证明此时每个特征值的几何重数都为1。
设 $A$ 是 $n \times n$ 矩阵,$A^2 = A$(幂等矩阵)。证明:$A$ 的特征值只能是 0 或 1,且 $A$ 可对角化。提示:考虑 $A$ 的最小多项式。
设 $T: V \to V$ 是线性算子,$U$ 是 $T$ 的不变子空间。证明:$T|_U$($T$ 在 $U$ 上的限制)的特征值也是 $T$ 的特征值。举例说明逆命题不成立。
设 $A$ 和 $B$ 是相似矩阵($B = P^{-1}AP$)。证明:$A$ 和 $B$ 有相同的特征多项式、特征值、迹和行列式。进一步,证明它们的特征值的代数重数和几何重数也相同。
挑战题
设 $T: V \to V$ 是线性算子,$\dim V = n$。证明:$T$ 的最小多项式的零点恰好是 $T$ 的所有特征值,且每个特征值在最小多项式中的重数等于其对应的最大 Jordan 块的尺寸。提示:使用 Jordan 标准形。
证明 Cayley-Hamilton 定理:设 $p_T$ 是 $T$ 的特征多项式,则 $p_T(T) = 0$。(提示:使用三角化或 Jordan 标准形)进一步,利用 Cayley-Hamilton 定理证明:任何 $n \times n$ 矩阵的逆(如果存在)可以表示为该矩阵的 $n-1$ 次多项式。