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

内积空间

引入度量

内积范数柯西-施瓦茨正交性

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

第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 算法

python
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, R

6.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 正交化

python
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 正交投影

python
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 最小二乘法

python
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 傅里叶级数作为正交展开

python
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 分解,比较三种方法的数值稳定性。

python
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 正交化

分析结果差异

python
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$。

6/9内积空间
0%