第6章 内积空间 - 引入度量 (Inner Product Spaces)
一、导读
6.1 本章学习目标
通过本章的学习,你将能够:
理解内积的定义和性质:掌握内积公理,理解内积如何引入长度和角度的概念
掌握柯西-施瓦茨不等式:理解其证明和几何意义,以及在各种场景中的应用
理解正交性的概念:掌握正交向量、正交补、正交投影的定义和性质
掌握 Gram-Schmidt 正交化过程:能够将任意基转换为标准正交基
理解正交投影的最佳逼近性质:理解为什么正交投影是最小化误差的解
掌握伴随算子的概念:理解 $\langle Tv, w \rangle = \langle v, T^*w \rangle$ 的意义
将内积空间理论应用于实际问题:如最小二乘法、傅里叶级数、信号处理
6.2 为什么本章如此重要
前几章研究的向量空间只有"线性"结构(加法和标量乘法),没有"度量"概念(长度、角度、距离)。内积空间的引入填补了这一空白,使得我们可以讨论向量的大小、方向之间的夹角、以及向量之间的距离。
从理论的角度看,内积空间是欧几里得空间和希尔伯特空间的桥梁。有限维内积空间就是欧几里得空间,无限维完备内积空间就是希尔伯特空间。这种结构在泛函分析、量子力学、信号处理中至关重要。
从应用的角度看:
- 机器学习:核方法(SVM)依赖内积计算相似度;余弦相似度用于文本分类
- 计算机图形学:光照计算需要法向量与光线方向的夹角;碰撞检测需要距离计算
- 信号处理:傅里叶变换本质上是正交基变换;小波分析使用正交小波基
- 物理学:量子态构成希尔伯特空间,可观测量是自伴算子
- 数值分析:最小二乘法、共轭梯度法都依赖内积空间理论
从认知的角度看,本章帮助你建立"几何思维"。内积将抽象的向量空间与直观的几何概念联系起来,使得我们可以用几何直觉来理解线性代数问题。
6.3 核心问题引导
在学习本章时,请持续思考以下问题:
什么是内积? 为什么内积必须满足共轭对称性、线性性和正定性?这些公理的几何意义是什么?
柯西-施瓦茨不等式为什么重要? 它如何保证角度的定义是有意义的?等号成立的条件是什么?
正交性有什么特殊之处? 为什么正交向量组一定是线性无关的?正交基比一般基好在哪里?
Gram-Schmidt 过程的核心思想是什么? 如何逐步构造正交向量?数值稳定性如何保证?
正交投影的最佳逼近性质如何证明? 这与最小二乘法有什么关系?
伴随算子与转置矩阵有什么关系? 在复内积空间中,为什么需要共轭转置?
自伴算子和酉算子有什么特殊性质? 它们的特征值和特征向量有什么特点?
二、核心概念详解
6.1 内积的定义
定义 6.1(内积)
设 $V$ 是 $\mathbb{F}$($\mathbb{R}$ 或 $\mathbb{C}$)上的向量空间。内积(Inner Product)是一个函数 $\langle \cdot, \cdot \rangle: V \times V \to \mathbb{F}$,满足以下公理:
对于所有 $u, v, w \in V$ 和 $\lambda \in \mathbb{F}$:
正定性:$\langle v, v \rangle \geq 0$,且 $\langle v, v \rangle = 0 \iff v = 0$
第一变元线性性:$\langle u + v, w \rangle = \langle u, w \rangle + \langle v, w \rangle$,且 $\langle \lambda v, w \rangle = \lambda \langle v, w \rangle$
共轭对称性:$\langle v, w \rangle = \overline{\langle w, v \rangle}$
注意:在复内积空间中,内积对第一个变元是线性的,对第二个变元是共轭线性的(有些教材采用相反约定)。在实内积空间中,共轭对称性退化为对称性 $\langle v, w \rangle = \langle w, v \rangle$。
配备了内积的向量空间称为内积空间(Inner Product Space)。
例 6.1:常见内积
欧几里得内积:在 $\mathbb{F}^n$ 中,定义:
$$\langle x, y \rangle = x_1\overline{y_1} + \cdots + x_n\overline{y_n} = \sum_{i=1}^n x_i\overline{y_i}$$
在实情况下,这就是点积 $x \cdot y$。
加权内积:在 $\mathbb{R}^n$ 中,给定正权重 $w_1, \ldots, w_n > 0$:
$$\langle x, y \rangle = \sum_{i=1}^n w_i x_i y_i$$
加权内积在某些特征比其他特征更重要的应用中很有用,如加权最小二乘法。
函数内积:在连续函数空间 $C([a, b])$ 中:
$$\langle f, g \rangle = \int_a^b f(x)\overline{g(x)} \, dx$$
这是傅里叶级数和正交多项式理论的基础。
矩阵内积:在 $\mathbb{F}^{m \times n}$ 中(Frobenius 内积):
$$\langle A, B \rangle = \text{tr}(B^*A) = \sum_{i,j} a_{ij}\overline{b_{ij}}$$
Frobenius 内积诱导的范数是 Frobenius 范数 $\|A\|_F = \sqrt{\sum_{i,j} |a_{ij}|^2}$。
Sobolev 内积:在微分方程中,定义:
$$\langle f, g \rangle = \int_a^b (f(x)\overline{g(x)} + f'(x)\overline{g'(x)}) \, dx$$
这种内积同时考虑函数值及其导数,用于能量空间。
关键洞察:内积的本质是衡量两个向量的"相似度"或"相关性"。不同的内积定义对应不同的相似性度量。
6.2 范数和距离
定义 6.2(范数 / 长度)
设 $V$ 是内积空间。向量 $v$ 的范数(Norm)或长度定义为:
$$\|v\| = \sqrt{\langle v, v \rangle}$$
定理 6.1:范数的性质
对于所有 $v, w \in V$ 和 $\lambda \in \mathbb{F}$:
非负性:$\|v\| \geq 0$,且 $\|v\| = 0 \iff v = 0$
齐次性:$\|\lambda v\| = |\lambda| \|v\|$
三角不等式:$\|v + w\| \leq \|v\| + \|w\|$
证明:
由内积的正定性直接得到。
$\|\lambda v\|^2 = \langle \lambda v, \lambda v \rangle = \lambda\overline{\lambda}\langle v, v \rangle = |\lambda|^2\|v\|^2$。开方得结论。
见下面的推导。$\square$
定理 6.2(柯西-施瓦茨不等式)
对于所有 $u, v \in V$:
$$|\langle u, v \rangle| \leq \|u\| \|v\|$$
等号成立当且仅当 $u$ 和 $v$ 线性相关。
证明:
如果 $v = 0$,不等式显然成立(两边都是 0)。假设 $v \neq 0$。
考虑向量 $u - \frac{\langle u, v \rangle}{\|v\|^2}v$。由正定性:
$$0 \leq \left\|u - \frac{\langle u, v \rangle}{\|v\|^2}v\right\|^2 = \left\langle u - \frac{\langle u, v \rangle}{\|v\|^2}v, u - \frac{\langle u, v \rangle}{\|v\|^2}v \right\rangle$$
展开:
$$= \langle u, u \rangle - \frac{\langle u, v \rangle}{\|v\|^2}\langle v, u \rangle - \frac{\overline{\langle u, v \rangle}}{\|v\|^2}\langle u, v \rangle + \frac{|\langle u, v \rangle|^2}{\|v\|^4}\langle v, v \rangle$$
$$= \|u\|^2 - \frac{|\langle u, v \rangle|^2}{\|v\|^2} - \frac{|\langle u, v \rangle|^2}{\|v\|^2} + \frac{|\langle u, v \rangle|^2}{\|v\|^2}$$
$$= \|u\|^2 - \frac{|\langle u, v \rangle|^2}{\|v\|^2}$$
因此:
$$\|u\|^2 - \frac{|\langle u, v \rangle|^2}{\|v\|^2} \geq 0 \implies |\langle u, v \rangle|^2 \leq \|u\|^2 \|v\|^2$$
开方得柯西-施瓦茨不等式。
等号成立当且仅当 $u - \frac{\langle u, v \rangle}{\|v\|^2}v = 0$,即 $u$ 和 $v$ 线性相关。$\square$
几何直觉:在 $\mathbb{R}^3$ 中,$\langle u, v \rangle = \|u\|\|v\|\cos\theta$,其中 $\theta$ 是夹角。柯西-施瓦茨不等式等价于 $|\cos\theta| \leq 1$。这个不等式保证了角度定义 $\cos\theta = \frac{\langle u, v \rangle}{\|u\|\|v\|}$ 是有意义的(分母不为零时,比值在 [-1, 1] 范围内)。
三角不等式的证明
$$\|v + w\|^2 = \langle v + w, v + w \rangle = \|v\|^2 + \langle v, w \rangle + \langle w, v \rangle + \|w\|^2$$
$$= \|v\|^2 + 2\text{Re}\langle v, w \rangle + \|w\|^2$$
$$\leq \|v\|^2 + 2|\langle v, w \rangle| + \|w\|^2$$
$$\leq \|v\|^2 + 2\|v\|\|w\| + \|w\|^2 = (\|v\| + \|w\|)^2$$
开方得 $\|v + w\| \leq \|v\| + \|w\|$。$\square$
几何解释:三角不等式表明"两点之间直线最短"。在向量空间中,从原点到 $v+w$ 的直接路径长度不超过经过 $v$ 再到 $w$ 的路径长度。
定义 6.3(距离)
在内积空间中,定义两点 $u, v$ 之间的距离为:
$$d(u, v) = \|u - v\|$$
这满足度量空间的所有公理(非负性、对称性、三角不等式)。
其他常见范数
除了由内积诱导的 $\ell_2$ 范数外,还有其他重要范数:
- $\ell_1$ 范数:$\|x\|_1 = \sum_{i=1}^n |x_i|$(曼哈顿距离)
- $\ell_\infty$ 范数:$\|x\|_\infty = \max_i |x_i|$(切比雪夫距离)
- $\ell_p$ 范数:$\|x\|_p = (\sum_{i=1}^n |x_i|^p)^{1/p}$
注意:只有 $\ell_2$ 范数是由内积诱导的。其他范数不满足平行四边形法则 $\|u+v\|^2 + \|u-v\|^2 = 2(\|u\|^2 + \|v\|^2)$。
6.3 正交性
定义 6.4(正交)
设 $V$ 是内积空间。向量 $u, v \in V$ 称为正交(Orthogonal),如果:
$$\langle u, v \rangle = 0$$
记作 $u \perp v$。
定理 6.3(勾股定理)
如果 $u \perp v$,则:
$$\|u + v\|^2 = \|u\|^2 + \|v\|^2$$
证明:
$$\|u + v\|^2 = \langle u + v, u + v \rangle = \|u\|^2 + \langle u, v \rangle + \langle v, u \rangle + \|v\|^2 = \|u\|^2 + \|v\|^2$$
(因为 $\langle u, v \rangle = 0$)$\square$
定理 6.4:正交向量组线性无关
设 $v_1, \ldots, v_n$ 是非零正交向量组(即 $\langle v_i, v_j \rangle = 0$ 当 $i \neq j$)。则 $v_1, \ldots, v_n$ 线性无关。
证明:
设 $\sum_{i=1}^n c_i v_i = 0$。对每个 $j$,取与 $v_j$ 的内积:
$$\left\langle \sum_{i=1}^n c_i v_i, v_j \right\rangle = \sum_{i=1}^n c_i \langle v_i, v_j \rangle = c_j \langle v_j, v_j \rangle = c_j \|v_j\|^2 = 0$$
由于 $v_j \neq 0$,$\|v_j\|^2 > 0$,所以 $c_j = 0$。对所有 $j$ 成立,故线性无关。$\square$
重要推论:在 $n$ 维内积空间中,最多有 $n$ 个两两正交的非零向量。如果有 $n$ 个,则它们构成基。
定义 6.5(标准正交基)
向量组 $e_1, \ldots, e_n$ 称为标准正交(Orthonormal),如果:
$$\langle e_i, e_j \rangle = \delta_{ij} = \begin{cases} 1 & i = j \\ 0 & i \neq j \end{cases}$$
即每个向量长度为 1,且两两正交。
如果标准正交向量组还是基,则称为标准正交基(Orthonormal Basis)。
定理 6.5:标准正交基的性质
设 $e_1, \ldots, e_n$ 是 $V$ 的标准正交基。则对于任意 $v \in V$:
$v = \sum_{i=1}^n \langle v, e_i \rangle e_i$
$\|v\|^2 = \sum_{i=1}^n |\langle v, e_i \rangle|^2$(Parseval 恒等式)
$\langle v, w \rangle = \sum_{i=1}^n \langle v, e_i \rangle \overline{\langle w, e_i \rangle}$
坐标计算只需做内积,无需解线性方程组
证明:
设 $v = \sum_{i=1}^n c_i e_i$。取与 $e_j$ 的内积:$\langle v, e_j \rangle = \sum_{i=1}^n c_i \langle e_i, e_j \rangle = c_j$。
$\|v\|^2 = \langle v, v \rangle = \left\langle \sum_{i=1}^n \langle v, e_i \rangle e_i, \sum_{j=1}^n \langle v, e_j \rangle e_j \right\rangle = \sum_{i,j} \langle v, e_i \rangle \overline{\langle v, e_j \rangle} \langle e_i, e_j \rangle = \sum_{i=1}^n |\langle v, e_i \rangle|^2$
类似推导。
在一般基下,求坐标需要解线性方程组 $[e_1, \ldots, e_n]c = v$。在标准正交基下,$c_i = \langle v, e_i \rangle$,直接计算即可。$\square$
实用价值:在标准正交基下,坐标计算非常简单,只需做内积。这比解线性方程组高效得多。此外,标准正交基下的矩阵运算更稳定,因为条件数为1。
6.4 Gram-Schmidt 正交化
定理 6.6(Gram-Schmidt 过程)
设 $v_1, \ldots, v_n$ 是线性无关向量组。则可以构造标准正交向量组 $e_1, \ldots, e_n$,使得对于每个 $k$,$\text{span}(e_1, \ldots, e_k) = \text{span}(v_1, \ldots, v_k)$。
构造过程:
$e_1' = v_1$,$e_1 = \frac{e_1'}{\|e_1'\|}$
$e_2' = v_2 - \langle v_2, e_1 \rangle e_1$,$e_2 = \frac{e_2'}{\|e_2'\|}$
一般地,$e_k' = v_k - \sum_{j=1}^{k-1} \langle v_k, e_j \rangle e_j$,$e_k = \frac{e_k'}{\|e_k'\|}$
证明:
由构造,$e_k'$ 与 $e_1, \ldots, e_{k-1}$ 正交(减去投影部分)。由于 $v_1, \ldots, v_n$ 线性无关,$e_k' \neq 0$,可以归一化。$\square$
几何直觉:Gram-Schmidt 过程的核心思想是"逐步去除已处理方向的分量"。每一步,我们从当前向量中减去它在之前所有正交向量上的投影,得到与之前所有向量正交的新向量。
数值稳定性:经典 Gram-Schmidt 在数值计算中可能不稳定,因为舍入误差会累积。改进的 Gram-Schmidt(Modified Gram-Schmidt, MGS)通过改变计算顺序提高稳定性。在实际应用中,Householder 反射或 Givens 旋转更常用,因为它们具有更好的数值性质。
改进的 Gram-Schmidt 算法
def modified_gram_schmidt(V):
"""
改进的 Gram-Schmidt 正交化
参数:
V: m x n 矩阵,每列是一个向量
返回:
Q: m x n 矩阵,每列是标准正交向量
R: n x n 上三角矩阵,使得 V = QR
"""
m, n = V.shape
Q = np.zeros_like(V)
R = np.zeros((n, n))
for j in range(n):
v = V[:, j].copy()
for i in range(j):
R[i, j] = np.dot(Q[:, i], V[:, j])
v = v - R[i, j] * Q[:, i]
R[j, j] = np.linalg.norm(v)
if R[j, j] < 1e-10:
raise ValueError("向量线性相关")
Q[:, j] = v / R[j, j]
return Q, R6.5 正交补和正交投影
定义 6.6(正交补)
设 $U$ 是内积空间 $V$ 的子空间。正交补(Orthogonal Complement)定义为:
$$U^\perp = \{v \in V : \langle v, u \rangle = 0, \forall u \in U\}$$
定理 6.7:正交补的性质
$U^\perp$ 是子空间
$U \cap U^\perp = \{0\}$
如果 $V$ 是有限维的,则 $V = U \oplus U^\perp$,且 $\dim U + \dim U^\perp = \dim V$
$(U^\perp)^\perp = U$(有限维情况)
证明:
验证子空间条件即可。
如果 $v \in U \cap U^\perp$,则 $\langle v, v \rangle = 0$,所以 $v = 0$。
取 $U$ 的标准正交基 $e_1, \ldots, e_k$,扩展为 $V$ 的标准正交基 $e_1, \ldots, e_k, f_1, \ldots, f_m$。则 $f_1, \ldots, f_m$ 是 $U^\perp$ 的基。
显然 $U \subseteq (U^\perp)^\perp$。由维度关系,$\dim(U^\perp)^\perp = \dim V - \dim U^\perp = \dim U$,所以相等。$\square$
定义 6.7(正交投影)
设 $U$ 是有限维内积空间 $V$ 的子空间。对于任意 $v \in V$,存在唯一的分解 $v = u + w$,其中 $u \in U$,$w \in U^\perp$。称 $u$ 为 $v$ 在 $U$ 上的正交投影(Orthogonal Projection),记作 $P_U v$。
定理 6.8:正交投影的最佳逼近性质
设 $U$ 是子空间,$v \in V$。则 $P_U v$ 是 $U$ 中距离 $v$ 最近的向量,即:
$$\|v - P_U v\| = \min_{u \in U} \|v - u\|$$
证明:
对于任意 $u \in U$,$v - u = (v - P_U v) + (P_U v - u)$。注意到 $v - P_U v \in U^\perp$,$P_U v - u \in U$,所以它们正交。
由勾股定理:
$$\|v - u\|^2 = \|v - P_U v\|^2 + \|P_U v - u\|^2 \geq \|v - P_U v\|^2$$
等号成立当且仅当 $u = P_U v$。$\square$
重要意义:这是最小二乘法的理论基础。正交投影给出了最佳线性逼近。在数据拟合、信号处理、机器学习中有广泛应用。
正交投影的计算
如果 $U$ 有标准正交基 $u_1, \ldots, u_k$,则:
$$P_U v = \sum_{i=1}^k \langle v, u_i \rangle u_i$$
如果 $U$ 的基不是标准正交的,设基向量为 $a_1, \ldots, a_k$,构成矩阵 $A = [a_1, \ldots, a_k]$,则:
$$P_U v = A(A^T A)^{-1} A^T v$$
注意:使用标准正交基时,$A^T A = I$,公式简化为 $P_U v = AA^T v$。
6.6 伴随算子
定义 6.8(伴随算子)
设 $T: V \to W$ 是内积空间之间的线性映射。伴随算子(Adjoint)$T^*: W \to V$ 是唯一满足以下条件的线性映射:
$$\langle Tv, w \rangle_W = \langle v, T^*w \rangle_V, \quad \forall v \in V, w \in W$$
定理 6.9:伴随算子的存在唯一性
伴随算子存在且唯一。
证明思路:
固定 $w \in W$。考虑线性泛函 $\phi_w(v) = \langle Tv, w \rangle_W$。由 Riesz 表示定理,存在唯一的 $z \in V$ 使得 $\phi_w(v) = \langle v, z \rangle_V$。定义 $T^*w = z$。$\square$
例 6.2:矩阵的伴随
在 $\mathbb{F}^n$ 和 $\mathbb{F}^m$ 中,如果 $T$ 由矩阵 $A$ 表示,则 $T^$ 由共轭转置矩阵 $A^$(或 $A^\dagger$)表示。
在实情况下,$A^* = A^T$(转置)。
验证:
$$\langle Av, w \rangle = (Av)^T w = v^T A^T w = \langle v, A^T w \rangle$$
定理 6.10:伴随算子的性质
$(S + T)^ = S^ + T^*$
$(\lambda T)^ = \overline{\lambda} T^$
$(ST)^ = T^ S^*$
$(T^)^ = T$
$\|T^*\| = \|T\|$
定义 6.9(自伴算子)
设 $T: V \to V$ 是线性算子。如果 $T = T^*$,则称 $T$ 是自伴(Self-Adjoint)或Hermitian的。
在矩阵语言中,$A = A^*$(实对称矩阵或复 Hermitian 矩阵)。
定理 6.11:自伴算子的特征值是实数
设 $T$ 是自伴算子,$\lambda$ 是特征值。则 $\lambda \in \mathbb{R}$。
证明:
设 $Tv = \lambda v$,$v \neq 0$。则:
$$\lambda \langle v, v \rangle = \langle \lambda v, v \rangle = \langle Tv, v \rangle = \langle v, T^*v \rangle = \langle v, Tv \rangle = \langle v, \lambda v \rangle = \overline{\lambda} \langle v, v \rangle$$
所以 $\lambda = \overline{\lambda}$,即 $\lambda \in \mathbb{R}$。$\square$
定义 6.10(酉算子)
设 $V$ 是复内积空间,$U: V \to V$ 是线性算子。如果 $U^U = I$(即 $U^ = U^{-1}$),则称 $U$ 是酉(Unitary)算子。
在实情况下,称为正交(Orthogonal)算子,满足 $Q^TQ = I$。
定理 6.12:酉算子的等价条件
以下条件等价:
$U$ 是酉算子
$\langle Uv, Uw \rangle = \langle v, w \rangle$ 对所有 $v, w$(保持内积)
$\|Uv\| = \|v\|$ 对所有 $v$(保持范数 / 等距)
$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)$:显然 $\square$
几何直觉:酉算子对应旋转和反射,保持向量的长度和夹角不变。在 $\mathbb{R}^2$ 中,旋转矩阵 $\begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}$ 是正交矩阵。
三、程序员的视角
3.1 在机器学习中的应用
核方法:SVM 和其他核方法通过内积计算样本间的相似度。核技巧允许我们在高维特征空间中隐式计算内积,而无需显式构造特征向量。常用的核函数包括线性核、多项式核、RBF 核等。
余弦相似度:在文本分类和信息检索中,文档被表示为词频向量,相似度由余弦夹角 $\cos\theta = \frac{\langle u, v \rangle}{\|u\|\|v\|}$ 衡量。余弦相似度对向量长度不敏感,适合比较不同长度的文档。
正交正则化:在神经网络中,鼓励权重矩阵的行(或列)保持正交,可以提高训练稳定性和泛化能力。正交初始化是一种常用的权重初始化方法。
主成分分析(PCA):PCA 寻找数据的最大方差方向,这些方向是协方差矩阵的特征向量,且两两正交。
3.2 常见陷阱与误区
误区 1:混淆内积与点积
点积只是欧几里得空间中的内积。一般内积空间可以有不同定义的内积,如加权内积、函数内积等。
误区 2:忽略复内积的共轭对称性
在复空间中,$\langle u, v \rangle \neq \langle v, u \rangle$,而是 $\langle u, v \rangle = \overline{\langle v, u \rangle}$。这在量子力学中尤为重要。
误区 3:认为正交意味着独立
正交向量一定线性无关,但线性无关向量不一定正交。需要通过 Gram-Schmidt 等方法将线性无关向量组正交化。
误区 4:忽略数值稳定性
经典 Gram-Schmidt 在浮点运算中可能累积误差。实际使用改进的 Gram-Schmidt 或 QR 分解(Householder 反射)。
误区 5:混淆正交性与不相关性
在统计学中,不相关性指协方差为零,这与内积空间中的正交性概念类似但不完全相同。只有在均值为零的情况下,不相关性才等价于正交性。
3.3 与其他层级的联系
- 与特征值的联系:自伴算子有实特征值和正交特征向量(谱定理)
- 与 SVD 的联系:SVD 可以看作非方阵的"特征分解"
- 与傅里叶分析的联系:傅里叶级数是函数空间中的正交展开
- 与优化的联系:梯度下降、共轭梯度法都依赖内积空间结构
- 与量子力学的联系:量子态构成 Hilbert 空间,测量对应正交投影
四、代码实战
6.1 Gram-Schmidt 正交化
import numpy as np
def gram_schmidt_classic(vectors, tol=1e-10):
"""
经典 Gram-Schmidt 正交化
参数:
vectors: 向量列表(每行是一个向量)
tol: 数值容差
返回:
orthonormal_basis: 标准正交基(每行是一个向量)
"""
vectors = np.array(vectors, dtype=float)
n = len(vectors)
orthonormal = []
for i in range(n):
# 取当前向量
v = vectors[i].copy()
# 减去在已有正交向量上的投影
for e in orthonormal:
proj = np.dot(v, e) * e
v -= proj
# 归一化
norm = np.linalg.norm(v)
if norm > tol:
e = v / norm
orthonormal.append(e)
else:
print(f"警告:向量 {i} 与前面的向量线性相关")
return np.array(orthonormal)
def gram_schmidt_modified(V, tol=1e-10):
"""
改进的 Gram-Schmidt 正交化(数值更稳定)
参数:
V: m x n 矩阵,每列是一个向量
返回:
Q: m x n 矩阵,每列是标准正交向量
R: n x n 上三角矩阵
"""
m, n = V.shape
Q = np.zeros_like(V)
R = np.zeros((n, n))
for j in range(n):
v = V[:, j].copy()
for i in range(j):
R[i, j] = np.dot(Q[:, i], V[:, j])
v = v - R[i, j] * Q[:, i]
R[j, j] = np.linalg.norm(v)
if R[j, j] > tol:
Q[:, j] = v / R[j, j]
else:
raise ValueError(f"向量 {j} 线性相关")
return Q, R
# 示例
vectors = [
[1, 1, 0],
[1, 0, 1],
[0, 1, 1]
]
orthonormal = gram_schmidt_classic(vectors)
print("标准正交基:")
print(orthonormal)
# 验证正交性
print("\n验证正交性:")
for i in range(len(orthonormal)):
for j in range(i, len(orthonormal)):
dot = np.dot(orthonormal[i], orthonormal[j])
print(f" <e{i+1}, e{j+1}> = {dot:.6f}")
# 使用改进的 Gram-Schmidt
V = np.array(vectors).T
Q, R = gram_schmidt_modified(V)
print("\nQ (标准正交基):")
print(Q)
print("\nR (上三角矩阵):")
print(R)
print("\n验证 V = QR:")
print(Q @ R)6.2 正交投影
import numpy as np
def orthogonal_projection(v, basis_U):
"""
计算向量 v 在子空间 U 上的正交投影
参数:
v: 目标向量
basis_U: 子空间 U 的基向量列表
返回:
projection: 投影向量
residual: 残差(垂直于 U 的部分)
"""
v = np.array(v, dtype=float)
basis_U = np.array(basis_U, dtype=float)
# 先对基进行正交化
ortho_basis = gram_schmidt_classic(basis_U)
# 计算投影:sum of <v, e_i> * e_i
projection = np.zeros_like(v)
for e in ortho_basis:
coeff = np.dot(v, e)
projection += coeff * e
residual = v - projection
return projection, residual
# 示例
v = [3, 2, 1]
basis_U = [[1, 0, 0], [0, 1, 0]] # xy 平面
proj, resid = orthogonal_projection(v, basis_U)
print(f"原始向量: {v}")
print(f"投影: {proj}")
print(f"残差: {resid}")
print(f"残差范数: {np.linalg.norm(resid):.6f}")
# 验证残差与基正交
for u in basis_U:
dot = np.dot(resid, u)
print(f" <残差, {u}> = {dot:.2e}")
# 使用矩阵公式
A = np.array(basis_U).T
P = A @ np.linalg.inv(A.T @ A) @ A.T
proj_matrix = P @ v
print(f"\n使用矩阵公式的投影: {proj_matrix}")6.3 最小二乘法
import numpy as np
import matplotlib.pyplot as plt
def least_squares_normal_equations(A, b):
"""
使用正规方程求解最小二乘问题 min ||Ax - b||^2
参数:
A: m x n 矩阵
b: m 维向量
返回:
x: 最小二乘解
"""
# 使用正规方程:A^T A x = A^T b
ATA = A.T @ A
ATb = A.T @ b
x = np.linalg.solve(ATA, ATb)
return x
def least_squares_qr(A, b):
"""
使用 QR 分解求解最小二乘问题(数值更稳定)
参数:
A: m x n 矩阵
b: m 维向量
返回:
x: 最小二乘解
"""
Q, R = np.linalg.qr(A)
# Ax = b => QRx = b => Rx = Q^T b
Qtb = Q.T @ b
x = np.linalg.solve(R[:A.shape[1], :A.shape[1]], Qtb[:A.shape[1]])
return x
# 示例:拟合直线 y = ax + b
np.random.seed(42)
x_data = np.array([1, 2, 3, 4, 5])
y_true = 2 * x_data + 1
y_data = y_true + np.random.randn(5) * 0.5 # 添加噪声
# 构建设计矩阵
A = np.column_stack([x_data, np.ones_like(x_data)])
b = y_data
# 求解
coeffs_ne = least_squares_normal_equations(A, b)
coeffs_qr = least_squares_qr(A, b)
print(f"正规方程解: a = {coeffs_ne[0]:.4f}, b = {coeffs_ne[1]:.4f}")
print(f"QR 分解解: a = {coeffs_qr[0]:.4f}, b = {coeffs_qr[1]:.4f}")
# 与 numpy 内置函数比较
coeffs_np = np.linalg.lstsq(A, b, rcond=None)[0]
print(f"NumPy lstsq: a = {coeffs_np[0]:.4f}, b = {coeffs_np[1]:.4f}")
# 可视化
x_fit = np.linspace(0, 6, 100)
y_fit = coeffs_ne[0] * x_fit + coeffs_ne[1]
plt.figure(figsize=(10, 6))
plt.scatter(x_data, y_data, color='blue', s=100, label='Data points')
plt.plot(x_fit, y_fit, 'r-', linewidth=2, label=f'Fit: y = {coeffs_ne[0]:.2f}x + {coeffs_ne[1]:.2f}')
plt.plot(x_data, y_true, 'g--', linewidth=2, label='True line')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Least Squares Linear Fit')
plt.legend()
plt.grid(True, alpha=0.3)
plt.savefig('/tmp/least_squares.png', dpi=150, bbox_inches='tight')
plt.show()
# 计算残差
residuals = A @ coeffs_ne - b
print(f"\n残差: {residuals}")
print(f"残差平方和: {np.sum(residuals**2):.4f}")6.4 傅里叶级数作为正交展开
import numpy as np
import matplotlib.pyplot as plt
def fourier_series(f, x, n_terms=10):
"""
计算函数的傅里叶级数近似
参数:
f: 函数
x: 评估点
n_terms: 项数
返回:
傅里叶级数近似值
"""
L = np.pi # 周期的一半
a0 = (1/L) * np.trapz([f(t) for t in np.linspace(-L, L, 1000)], np.linspace(-L, L, 1000))
result = a0 / 2
for n in range(1, n_terms + 1):
# 计算 a_n
cos_vals = [f(t) * np.cos(n * np.pi * t / L) for t in np.linspace(-L, L, 1000)]
a_n = (1/L) * np.trapz(cos_vals, np.linspace(-L, L, 1000))
# 计算 b_n
sin_vals = [f(t) * np.sin(n * np.pi * t / L) for t in np.linspace(-L, L, 1000)]
b_n = (1/L) * np.trapz(sin_vals, np.linspace(-L, L, 1000))
result += a_n * np.cos(n * np.pi * x / L) + b_n * np.sin(n * np.pi * x / L)
return result
# 方波函数
def square_wave(x):
return 1 if np.sin(x) > 0 else -1
# 评估点
x = np.linspace(-2*np.pi, 2*np.pi, 1000)
y_true = [square_wave(xi) for xi in x]
# 傅里叶级数近似
y_approx_5 = [fourier_series(square_wave, xi, n_terms=5) for xi in x]
y_approx_20 = [fourier_series(square_wave, xi, n_terms=20) for xi in x]
# 可视化
plt.figure(figsize=(12, 6))
plt.plot(x, y_true, 'k-', linewidth=2, label='Square wave')
plt.plot(x, y_approx_5, 'b--', linewidth=1.5, label='Fourier (5 terms)')
plt.plot(x, y_approx_20, 'r-', linewidth=1.5, label='Fourier (20 terms)')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Fourier Series Approximation')
plt.legend()
plt.grid(True, alpha=0.3)
plt.ylim(-1.5, 1.5)
plt.savefig('/tmp/fourier_series.png', dpi=150, bbox_inches='tight')
plt.show()五、深入思考
5.1 历史背景
内积空间理论的发展:
- 19世纪:Fourier 级数研究启发了正交展开的思想
- 1904年:Hilbert 研究了积分方程,引入了无限维空间的概念
- 1920年代:Banach、von Neumann 等人建立了泛函分析的公理化基础
- 1930年代:量子力学的数学形式化使用了 Hilbert 空间理论
- 1960年代:数值线性代数的发展推动了正交化算法的研究
5.2 前沿方向
再生核希尔伯特空间(RKHS):在机器学习中,核函数定义了特征空间的内积,使得我们可以在高维空间中进行线性操作而无需显式构造特征向量。SVM、高斯过程等都基于 RKHS 理论。
压缩感知:利用信号的稀疏性和正交基,可以从少量测量中恢复信号。这在医学成像、雷达、通信中有重要应用。
量子信息:量子态构成 Hilbert 空间,量子操作是酉算子,测量对应正交投影。量子纠缠可以用张量积空间中的非乘积态描述。
深度学习中的正交约束:正交权重初始化、正交正则化等技术用于改善深度神经网络的训练动态。
5.3 延伸阅读
Sheldon Axler, Linear Algebra Done Right, 3rd Edition, Springer, 2015 - Chapter 6
Walter Rudin, Functional Analysis - 泛函分析的经典教材
Gilbert Strang, Introduction to Linear Algebra, 5th Edition - Chapter 4
3Blue1Brown, "The Essence of Linear Algebra" 关于点积和叉积的视频
John Conway, A Course in Functional Analysis - Hilbert 空间理论
六、实验笔记
实验 1:探索 Gram-Schmidt 过程的数值稳定性
目标:比较经典 Gram-Schmidt 和改进 Gram-Schmidt 的数值表现
步骤:
生成一个病态矩阵(条件数大)
分别用经典和改进的 Gram-Schmidt 进行正交化
检查结果的正交性($Q^T Q$ 与单位矩阵的偏差)
分析误差来源
扩展:实现 Householder 反射方法进行 QR 分解,比较三种方法的数值稳定性。
import numpy as np
# 生成病态矩阵
np.random.seed(42)
n = 20
V = np.random.rand(n, n)
V[:, 0] = V[:, 1] + 1e-8 * np.random.randn(n) # 使前两列几乎线性相关
# 经典 Gram-Schmidt
Q_classic = gram_schmidt_classic(V.T).T
# 改进 Gram-Schmidt
Q_mgs, R_mgs = gram_schmidt_modified(V)
# Householder QR
Q_householder, R_householder = np.linalg.qr(V)
# 检查正交性
def check_orthogonality(Q, name):
I_check = Q.T @ Q
error = np.linalg.norm(I_check - np.eye(Q.shape[1]))
print(f"{name}: ||Q^T Q - I|| = {error:.2e}")
check_orthogonality(Q_classic, "Classic GS")
check_orthogonality(Q_mgs, "Modified GS")
check_orthogonality(Q_householder, "Householder QR")实验 2:最小二乘法的几何解释
目标:直观理解最小二乘解是正交投影
步骤:
生成一组带噪声的数据点
用最小二乘法拟合直线/多项式
绘制数据点、拟合曲线、残差向量
验证残差与设计矩阵的列空间正交
尝试不同阶数的多项式,观察过拟合现象
挑战:实现加权最小二乘法,给不同数据点分配不同权重。
实验 3:探索不同内积定义的影响
目标:理解内积定义如何影响几何概念
步骤:
定义不同的内积(标准内积、加权内积)
在同一向量空间中使用不同内积计算长度、角度
观察正交性的变化
用不同内积进行 Gram-Schmidt 正交化
分析结果差异
import numpy as np
# 定义加权内积
def weighted_inner_product(u, v, weights):
return np.dot(u * weights, v * weights)
# 示例
u = np.array([1, 2])
v = np.array([2, 1])
weights1 = np.array([1, 1]) # 标准内积
weights2 = np.array([2, 1]) # 加权内积
print(f"标准内积: <u, v> = {weighted_inner_product(u, v, weights1)}")
print(f"加权内积: <u, v> = {weighted_inner_product(u, v, weights2)}")
# 计算角度
def angle_between(u, v, weights):
ip = weighted_inner_product(u, v, weights)
norm_u = np.sqrt(weighted_inner_product(u, u, weights))
norm_v = np.sqrt(weighted_inner_product(v, v, weights))
cos_theta = ip / (norm_u * norm_v)
return np.arccos(np.clip(cos_theta, -1, 1))
print(f"\n标准内积下的角度: {np.degrees(angle_between(u, v, weights1)):.2f}°")
print(f"加权内积下的角度: {np.degrees(angle_between(u, v, weights2)):.2f}°")七、本章小结
本章引入了内积空间的结构,核心内容包括:
核心概念:
- 内积引入了长度、角度、距离的概念
- 柯西-施瓦茨不等式保证了角度定义的合理性
- 正交向量组线性无关,标准正交基简化了坐标计算
- Gram-Schmidt 过程将任意基转换为标准正交基
- 正交投影给出最佳线性逼近
- 伴随算子是内积空间中的"转置"
关键定理:
- 柯西-施瓦茨不等式:$|\langle u, v \rangle| \leq \|u\|\|v\|$
- 勾股定理:正交向量的范数平方等于各分量范数平方之和
- 正交投影的最佳逼近性质
- 自伴算子的特征值是实数
- 酉算子保持内积和范数
几何直觉:
- 内积衡量两个向量的"相似度"
- 正交意味着"垂直"或"无关"
- 投影是将向量"影子"投射到子空间上
- 标准正交基对应"最整齐"的坐标系
编程实践:
- 实现 Gram-Schmidt 正交化(经典和改进版本)
- 计算正交投影
- 用最小二乘法拟合数据
- 用 QR 分解提高数值稳定性
应用领域:
- 机器学习:核方法、PCA、余弦相似度
- 信号处理:傅里叶级数、小波分析
- 数值分析:最小二乘法、共轭梯度法
- 物理学:量子力学、振动分析
内积空间为谱定理奠定了基础,下一章我们将研究自伴算子的对角化。
八、习题
基础题
在 $\mathbb{R}^3$ 中,计算下列向量的内积和夹角:
- (a) $u = (1, 2, 3)$,$v = (4, -1, 2)$
- (b) 找出一个与 $u$ 和 $v$ 都正交的向量
- (c) 计算 $u$ 在 $v$ 方向上的投影
对向量组 $(1, 1, 0), (1, 0, 1), (0, 1, 1)$ 应用 Gram-Schmidt 过程,得到标准正交基。验证结果的正交性。
设 $U = \text{span}((1, 0, 1), (0, 1, 1)) \subseteq \mathbb{R}^3$。求 $(1, 1, 1)$ 在 $U$ 上的正交投影,并计算投影误差。
证明:如果 $e_1, \ldots, e_n$ 是标准正交基,则任意 $v = \sum_{i=1}^n \langle v, e_i \rangle e_i$。进一步,证明 Parseval 恒等式 $\|v\|^2 = \sum_{i=1}^n |\langle v, e_i \rangle|^2$。
进阶题
设 $T: V \to V$ 是线性算子。证明:$\|T\| = \sup_{\|v\|=1} \|Tv\|$ 定义了一个范数(算子范数)。进一步,证明 $\|T\| = \sqrt{\lambda_{\max}(T^*T)}$,其中 $\lambda_{\max}$ 是最大特征值。
设 $A$ 是 $m \times n$ 矩阵。证明:$A^A$ 是自伴的,且其特征值非负。进一步,证明 $\text{rank}(A^A) = \text{rank}(A)$。
设 $U$ 是有限维内积空间 $V$ 的子空间。证明:$(U^\perp)^\perp = U$。举例说明在无限维空间中这可能不成立。
设 $T$ 是自伴算子。证明:不同特征值对应的特征向量正交。进一步,证明如果 $\lambda$ 是重特征值,则可以在对应的特征空间中选择正交基。
挑战题
证明 Bessel 不等式:设 $e_1, \ldots, e_n$ 是标准正交向量组(不一定是基),则 $\sum_{i=1}^n |\langle v, e_i \rangle|^2 \leq \|v\|^2$。等号成立当且仅当 $v \in \text{span}(e_1, \ldots, e_n)$。进一步,将此结果推广到无限维 Hilbert 空间中的可数标准正交系。
设 $T: V \to V$ 是线性算子。证明:$T$ 可以唯一分解为 $T = A + iB$,其中 $A$ 和 $B$ 是自伴算子。(这称为 Cartesian 分解)进一步,证明 $T$ 是正规的当且仅当 $AB = BA$。