系列 · 线性代数 · 第 7 篇

线性代数(七):正交性与投影——当向量互不干扰

正交性是 GPS 定位、降噪耳机和 JPEG 压缩的数学基础。本章从正交向量与投影的几何直觉出发,一路讲到 Gram-Schmidt 正交化、QR 分解和最小二乘 -- 现代科学计算的脊梁。

为什么正交性如此重要#

两个向量正交,意味着它们彼此互不干扰。一个方向上的信息完全不会影响另一个方向。这个简单的概念支撑了 GPS 定位、降噪耳机、JPEG 压缩、推荐系统以及数值线性代数的大部分应用。

线性代数(七):正交性与投影——当向量互不干扰 — 章节概览图

正交性是线性代数中最大的计算捷径。用普通基求坐标时,需要解线性方程组;而用正交基,每个坐标只需计算一次点积。同一个问题,换种方法,就从复杂变得简单。

本章从日常生活中“垂直”的直观概念出发,逐步深入到科学计算的核心工具:正交投影、Gram-Schmidt 正交化、QR 分解和最小二乘法。

你将学到#

  • 点积为零为什么意味着几何上的垂直
  • 正交基和标准正交基如何让坐标计算变得简单
  • 向量投影:影子背后的数学原理
  • 子空间投影与投影矩阵 $P=A(A^TA)^{-1}A^T$
  • Gram-Schmidt 正交化:手工构造正交基的方法
  • QR 分解: Gram-Schmidt 的矩阵形式封装
  • 最小二乘法:当方程无解时,如何找到最佳近似解

前置知识:#


从直觉出发:什么是正交#

生活中的“互不干扰”#

先别急着看公式,感受一下“正交”在生活里是什么样子。

城市街道: 曼哈顿的街道是方格网状的,南北向和东西向互相垂直。你往东走 3 个街区,南北方向的位置完全不变。两个方向,零干扰,这就是正交。

电视遥控器: 音量键和频道键互不干涉。按音量不会换台,调频道也不会改变音量。两个功能,各自独立。

调味料: 盐控制咸度,糖控制甜度。在合理范围内,加盐不会让菜变甜(请厨师们原谅这个简化)。两个变量,两种效果,没有交叉影响。

反复出现的模式是:正交方向承载的是彼此独立的信息

正交的数学定义#

两个向量$\vec{u}$$\vec{v}$ 正交,当且仅当:$\vec{u}\cdot\vec{v}=0$
用分量表示就是:$u_1v_1+u_2v_2+\cdots+u_nv_n=0$

为什么“点积为零”就是“垂直”? 点积的几何形式是:$\vec{u}\cdot\vec{v}=\|\vec{u}\|\|\vec{v}\|\cos\theta$
$\theta=90^\circ$ 时,$\cos\theta=0$ ,所以点积为零。

正交向量与一般向量对比

几个需要记住的特殊情况:

  • 零向量与任何向量都正交($\vec{0}\cdot\vec{v}=0$ 恒成立)。
  • 标准基向量两两正交:$\vec{e}_i\cdot\vec{e}_j=0$$i\neq j$ )。
  • 非零向量不可能与自己正交($\vec{v}\cdot\vec{v}=\|\vec{v}\|^2>0$ )。

更深一层:信息独立#

正交的本质其实是信息独立。当两个向量正交时,知道其中一个方向上的分量,对另一个方向上的分量没有任何提示。它们各自度量着不同的内容。

举个语言上的小例子。描述一个人:

  • “身高”和“体重”高度相关,并不正交。
  • “身高”和“眼睛颜色”几乎正交——一个完全预测不了另一个。

数据分析中,我常常专门寻找一组正交特征,因为它们承载的是非冗余信息。这就是主成分分析(PCA)的核心思想,本章末尾会再回到这个话题。


正交集与正交基#

定义#

向量集合$\{\vec{v}_1,\ldots,\vec{v}_k\}$正交集,如果其中任意两个不同的向量都满足$\vec{v}_i\cdot\vec{v}_j=0\quad(\,i\neq j\,)$$\mathbb{R}^3$ 中的标准基$\{\vec{e}_1,\vec{e}_2,\vec{e}_3\}$ 是最典型的例子:三根互相垂直的坐标轴。

正交集自动线性独立#

定理: 任何不含零向量的正交集都是线性独立的。

直观理解: 想象三根互相垂直的木棍,它们指向完全不同的方向。你不可能用其中两根拼凑出第三根,因为它们之间没有任何重叠。

一行证明: 假设$c_1\vec{v}_1+\cdots+c_k\vec{v}_k=\vec{0}$ ,两边同时点乘$\vec{v}_i$ 。所有$\vec{v}_j\cdot\vec{v}_i$$j\neq i$ )项都为零,只剩$c_i\|\vec{v}_i\|^2=0$ 。因为$\vec{v}_i\neq\vec{0}$ ,所以$c_i=0$ 对每个$i$ 成立。证毕。

正交性直接带来了线性独立。

标准正交基#

如果一组正交向量每个都是单位向量,就叫标准正交集;如果它还能张成整个空间,就是标准正交基

对于标准正交基$\{\vec{q}_1,\ldots,\vec{q}_n\}$ ,有$\vec{q}_i\cdot\vec{q}_j=\delta_{ij}=\begin{cases}1,&i=j\\0,&i\neq j\end{cases}$

为什么正交基这么好用#

给定一个向量$\vec{v}$ 和一组基$\{\vec{u}_1,\ldots,\vec{u}_n\}$ ,目标是找到坐标$c_1,\ldots,c_n$ ,使得$\vec{v}=c_1\vec{u}_1+\cdots+c_n\vec{u}_n$

  • 一般基: 解方程组$U\vec{c}=\vec{v}$ ,需要高斯消元,复杂度是$O(n^3)$
  • 正交基: 每个坐标直接通过点积计算:$c_i=\frac{\vec{v}\cdot\vec{u}_i}{\|\vec{u}_i\|^2}$
  • 标准正交基: 更简单:$c_i=\vec{v}\cdot\vec{q}_i$ 。每个坐标只需$O(n)$ 次运算,不用解方程,也不会出现数值不稳定的情况。

举个例子:用正交基分解向量,就像称一堆行李。如果基不正交,就得把所有行李堆在一起称,再倒推每件多重;如果基正交,就可以一件一件分开称,省时又准确。


向量投影:影子的数学#

把 b 投影到 a 上,误差与 a 垂直

一维投影#

想象一下,正午的阳光垂直照射下来,一根倾斜的棍子在地上投下影子。这个影子就是棍子在地面方向上的投影

向量$\vec{b}$ 在向量$\vec{a}$ 上的正交投影公式是:$\mathrm{proj}_{\vec{a}}\vec{b}=\frac{\vec{a}\cdot\vec{b}}{\vec{a}\cdot\vec{a}}\,\vec{a}$ 。仔细看这个公式:

-$\vec{a}\cdot\vec{b}$ 表示$\vec{b}$$\vec{a}$ 方向上的分量有多大;
-$\vec{a}\cdot\vec{a}=\|\vec{a}\|^2$ 用来归一化$\vec{a}$ 的长度平方;

  • 这个比值是一个标量,再乘以$\vec{a}$ ,就得到了投影向量。

标量投影——也就是投影的有向长度——是:$\mathrm{comp}_{\vec{a}}\vec{b}=\frac{\vec{a}\cdot\vec{b}}{\|\vec{a}\|}$ 。如果$\vec{b}$ 大致和$\vec{a}$ 反向,这个值会是负数。

投影 = 最近点#

这里有一个重要的几何事实:$\mathrm{proj}_{\vec{a}}\vec{b}$ 是直线$\mathrm{span}\{\vec{a}\}$ 上离$\vec{b}$ 最近的点。

为什么?假设投影是$\hat{\vec{b}}$ ,误差是$\vec{e}=\vec{b}-\hat{\vec{b}}$ 。根据定义,$\vec{e}\perp\vec{a}$ 。对于直线上任意一点$t\vec{a}$ ,勾股定理告诉我们:$\|\vec{b}-t\vec{a}\|^2=\|\vec{e}\|^2+\|t\vec{a}-\hat{\vec{b}}\|^2\geq\|\vec{e}\|^2$ 。只有当$t\vec{a}=\hat{\vec{b}}$ 时,等号才成立。投影自动让距离最小化。

正交分解#

任何向量$\vec{b}$ 都可以唯一地分解成两部分:一部分平行于$\vec{a}$ ,另一部分垂直于$\vec{a}$$\vec{b}=\underbrace{\mathrm{proj}_{\vec{a}}\vec{b}}_{\text{平行}}+\underbrace{(\vec{b}-\mathrm{proj}_{\vec{a}}\vec{b})}_{\text{垂直}}$ 。这两部分互相正交。物理学中,斜面上的重力可以分解成沿斜面和垂直斜面的两个分量,这就是正交分解的经典应用。


子空间投影:从直线到平面#

问题背景#

如果我想把一个向量投影到的不是一个直线,而是一个平面,或者更高维的子空间 $W$ 呢?定义 $\vec{b}$$W$ 上的投影 $\hat{\vec{b}}$ 满足以下条件:$\vec{b}-\hat{\vec{b}}\,\perp\,W$ 。也就是说,误差向量与 $W$ 中的每一个向量都正交。

向量 b 投影到平面 W

投影矩阵#

假设 $W=\mathrm{Col}(A)$ ,其中 $A$ 是一个列线性独立的 $m\times n$ 矩阵,那么投影可以用一个简洁的闭式表达:$\hat{\vec{b}}=A(A^TA)^{-1}A^T\vec{b}$ 。对应的投影矩阵为:$P=A(A^TA)^{-1}A^T$ 。这个矩阵有三个重要性质需要记住:

  1. 幂等性$P^2=P$ 。投影一次后,再投影不会改变结果。
  2. 对称性$P^T=P$ 。正交投影是对称的,斜投影则不是。
  3. $\mathrm{rank}(P)=n=\dim W$

这三条性质合起来,完全刻画了正交投影矩阵。

正规方程#

满足 $\hat{\vec{b}}=A\hat{\vec{x}}$ 的坐标向量 $\hat{\vec{x}}$ ,是正规方程的解:$A^TA\hat{\vec{x}}=A^T\vec{b}$ 。这个公式来源于正交条件 $\vec{b}-A\hat{\vec{x}}\perp\mathrm{Col}(A)$ ,也就是 $A^T(\vec{b}-A\hat{\vec{x}})=\vec{0}$

正交补空间#

子空间 $W\subseteq\mathbb{R}^n$正交补,是指所有与 $W$ 中向量正交的向量集合:$W^{\perp}=\{\vec{v}\in\mathbb{R}^n:\vec{v}\cdot\vec{w}=0,\ \forall\vec{w}\in W\}$

正交补与唯一分解

任何向量都可以唯一分解为 $\vec{v}=\vec{v}_W+\vec{v}_{W^{\perp}}$ ,其中 $\vec{v}_W\in W$$\vec{v}_{W^{\perp}}\in W^{\perp}$ 。我们用 $\mathbb{R}^n=W\oplus W^{\perp}$ 表示这种分解。

矩阵 $A$ 的四大基本子空间满足以下关系:

  • $\mathrm{Col}(A)^{\perp}=\mathrm{Null}(A^T)$ (列空间的正交补是左零空间)
  • $\mathrm{Null}(A)^{\perp}=\mathrm{Row}(A)$ (零空间的正交补是行空间)

这就是 Strang 教授每节课结尾都会画在黑板上的“正交结构图”。


Gram-Schmidt:构造正交基#

线性代数(七):正交性与投影——当向量互不干扰 — 章节小结图

问题#

我有一组线性无关的向量 $\vec{a}_1,\ldots,\vec{a}_n$ ,但它们并不正交。能不能调整这些向量,让它们变成一组正交向量,同时保持张成的空间不变?

答案是肯定的。Gram-Schmidt 算法就是干这个的,它每次处理一个方向,逐步完成。

Gram-Schmidt:歪斜的输入变成正交基

算法#

按照以下步骤构造正交向量 $\vec{u}_1,\ldots,\vec{u}_n$

第一步 直接取第一个向量:$\vec{u}_1=\vec{a}_1$

$$\vec{u}_2=\vec{a}_2-\frac{\vec{u}_1\cdot\vec{a}_2}{\vec{u}_1\cdot\vec{u}_1}\,\vec{u}_1$$ $$\vec{u}_3=\vec{a}_3-\frac{\vec{u}_1\cdot\vec{a}_3}{\vec{u}_1\cdot\vec{u}_1}\,\vec{u}_1-\frac{\vec{u}_2\cdot\vec{a}_3}{\vec{u}_2\cdot\vec{u}_2}\,\vec{u}_2$$ $$\vec{u}_k=\vec{a}_k-\sum_{j=1}^{k-1}\frac{\vec{u}_j\cdot\vec{a}_k}{\vec{u}_j\cdot\vec{u}_j}\,\vec{u}_j$$ $$\vec{q}_k=\vec{u}_k/\|\vec{u}_k\|$$

直观理解#

可以把它看作一步步搭建正交坐标系:

  • 第一根轴 随便选一个方向。
  • 第二根轴 找一个大致指向别的方向的向量,去掉它在第一根轴上的分量,剩下的部分自然垂直于第一根轴。
  • 第三根轴 再找一个向量,去掉它在前两根轴上的分量,剩下的部分就同时垂直于前两根轴。

每一步都在清除前面方向的影响,只保留新的信息。

数值稳定性:改进版 Gram-Schmidt#

经典算法有个隐患。浮点运算中,每次减法都会引入小误差。向量多了以后,误差会累积,后面的 $\vec{u}_k$ 就慢慢偏离了和前面正交的状态。

改进版 Gram-Schmidt 把同样的计算重新排列,工作向量在每次投影后立刻更新,数值上要稳定得多:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import numpy as np

def modified_gram_schmidt(A):
    """改进版 Gram-Schmidt:数值更稳定的正交化算法"""
    m, n = A.shape
    Q = A.copy().astype(float)
    R = np.zeros((n, n))
    for j in range(n):
        R[j, j] = np.linalg.norm(Q[:, j])
        Q[:, j] = Q[:, j] / R[j, j]
        for k in range(j + 1, n):
            R[j, k] = Q[:, j] @ Q[:, k]
            Q[:, k] = Q[:, k] - R[j, k] * Q[:, j]
    return Q, R

工业级实现通常用 Householder 反射numpy.linalg.qr 内部就是它),稳定性更好。

QR 分解: Gram-Schmidt 的矩阵形式#

QR 分解:A 的列在标准正交基 Q 下的坐标

定义#

任意一个列线性独立的 $m \times n$ 矩阵 $A$ 都可以分解为 $A = QR$ 。其中,$Q$ 是一个 $m \times n$ 的矩阵,列向量标准正交(满足 $Q^TQ = I$ ),$R$ 是一个 $n \times n$ 的上三角矩阵,且对角元均为正数。

$Q$$R$ 的来源#

$Q$ 的列向量就是对 $A$ 的列向量进行 Gram-Schmidt 正交化后得到的标准正交向量。$R$ 的元素记录了投影系数:$r_{ij} = \vec{q}_i \cdot \vec{a}_j$ 。为什么 $R$ 是上三角的?因为 $\vec{a}_j$ 只需要用前 $j$$\vec{q}$ 表示,完全不需要后面的正交向量。对角线下方的元素是 $\vec{a}_j$ 在编号靠后的 $\vec{q}_k$$k > j$ )上的系数,这些系数必然为零。

换句话说,$\vec{a}_j$ 位于前 $j$ 个标准正交轴张成的子空间中,而 $R$ 就是从 $\vec{q}$ 回到 $\vec{a}$ 的换基矩阵。

为什么 QR 分解重要:更稳定的最小二乘法#

正规方程 $A^TA\hat{\vec{x}} = A^T\vec{b}$ 在数值计算中有一个致命问题:构造 $A^TA$ 会让条件数平方,即 $\kappa(A^TA) = \kappa(A)^2$ 。如果数据接近共线,结果会非常不稳定。

$$R^TQ^TQR\hat{\vec{x}} = R^TQ^T\vec{b}$$ $$R\hat{\vec{x}} = Q^T\vec{b}$$

这是一个上三角方程组,通过回代求解只需 $O(n^2)$ 次运算,既快又稳定。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
def qr_decomposition(A):
    """通过改进版 Gram-Schmidt 实现 QR 分解"""
    m, n = A.shape
    Q = np.zeros((m, n))
    R = np.zeros((n, n))
    for j in range(n):
        v = A[:, j].copy()
        for i in range(j):
            R[i, j] = Q[:, i] @ A[:, j]
            v = v - R[i, j] * Q[:, i]
        R[j, j] = np.linalg.norm(v)
        Q[:, j] = v / R[j, j]
    return Q, R

A = np.array([[1, 1], [1, 0], [0, 1]], dtype=float)
Q, R = qr_decomposition(A)
print("Q =\n", Q)
print("R =\n", R)
print("验证 A = QR:\n", Q @ R)

最小二乘:当方程无解时#

最小二乘 = 把 b 投影到 Col(A) 上

问题#

现实中的数据总是有噪声。比如,想用一条直线拟合 5 个测量点?这就是一个包含 5 个方程、 2 个未知数的超定方程组。除非这 5 个点恰好共线,否则没有任何$\vec{x}$ 能满足$A\vec{x}=\vec{b}$

我不放弃,只是换个思路。

最小二乘的思想#

既然无法精确求解$A\vec{x}=\vec{b}$ ,那就找一个$\hat{\vec{x}}$ ,让误差平方和最小$\min_{\vec{x}}\|A\vec{x}-\vec{b}\|^2$

从几何上看,当$\vec{x}$ 变化时,$A\vec{x}$ 会跑遍列空间$\mathrm{Col}(A)$ 。最小化$\|A\vec{x}-\vec{b}\|$ 就是在$\mathrm{Col}(A)$ 中找到离$\vec{b}$ 最近的点——这正是正交投影!最终,$\hat{\vec{x}}$ 满足$A\hat{\vec{x}}=\hat{\vec{b}}$ ,其中$\hat{\vec{b}}$$\vec{b}$$\mathrm{Col}(A)$ 上的投影。

上图左边是熟悉的“散点 + 最佳拟合直线”画面,右边是从几何视角看同一件事:把$\vec{b}$ 投影到代表列空间的平面。两幅图,同一个问题。

正规方程(再推一遍)#

正交条件要求$\vec{b}-A\hat{\vec{x}}$$\mathrm{Col}(A)$ 垂直,因此有$A^T(\vec{b}-A\hat{\vec{x}})=\vec{0}$ ,即:$A^TA\hat{\vec{x}}=A^T\vec{b}$

用微积分也能推导:展开$\|A\vec{x}-\vec{b}\|^2$ ,对$\vec{x}$ 求梯度并令其为零,结果完全一致。

线性回归示例#

$y=\beta_0+\beta_1 x$ 拟合以下数据点:$(1,2.1),(2,3.9),(3,6.2),(4,7.8),(5,10.1)$

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import numpy as np

x = np.array([1, 2, 3, 4, 5])
y = np.array([2.1, 3.9, 6.2, 7.8, 10.1])

A = np.column_stack([np.ones(len(x)), x])  # 设计矩阵

Q, R = np.linalg.qr(A)
coeffs = np.linalg.solve(R, Q.T @ y)
print(f"最佳拟合: y = {coeffs[0]:.4f} + {coeffs[1]:.4f}x")

加权最小二乘#

如果某些测量点比其他点更可信,就给它们更大的权重$w_i$$\min_{\vec{x}}\sum_i w_i(\vec{a}_i^T\vec{x}-b_i)^2$

此时正规方程变为$A^TWA\hat{\vec{x}}=A^TW\vec{b}$ ,其中$W=\mathrm{diag}(w_1,\ldots,w_m)$


正交矩阵:保持几何特性#

定义#

如果一个方阵 $Q$ 满足 $Q^TQ=I$ ,那么它就是正交矩阵。换句话说,$Q^{-1}=Q^T$ 。转置等于逆——这就是为什么正交矩阵求逆特别高效。

正交矩阵保持所有几何特性#

它们是“刚体变换”,能够保持以下性质:

  • 长度不变$\|Q\vec{x}\|=\|\vec{x}\|$
  • 内积不变$(Q\vec{x})\cdot(Q\vec{y})=\vec{x}\cdot\vec{y}$
  • 角度不变:内积不变,角度自然也不变

旋转与反射的区别#

正交矩阵的行列式只能是 $\pm 1$

  • $\det Q=+1$ :表示旋转,保持左右手定则。
  • $\det Q=-1$ :表示反射,会翻转左右手定则。
$$R(\theta)=\begin{pmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{pmatrix}$$

Householder 反射是另一类重要的正交矩阵,也是工业级 QR 分解算法的核心组件。

为什么数值计算钟爱正交矩阵#

$$\kappa(Q)=\frac{\sigma_{\max}}{\sigma_{\min}}=1$$

用正交矩阵进行计算时,误差不会被放大。这正是许多高质量数值算法(如 QR、 SVD、 Householder、 Givens)都围绕正交矩阵设计的根本原因。

应用举例#

傅里叶分析#

离散傅里叶变换(DFT)从数学上看,就是把信号转换到一组复指数构成的正交基上。每个频率分量可以独立处理,因为这些基向量之间互不干扰。这正是滤波能够实现的根本原因。

降噪耳机#

麦克风捕捉外界噪声,处理器通过 FFT 把噪声分解成正交的频率分量,生成一个相位相反的信号,再通过扬声器播放出来。由于这些分量是正交的,噪声会被精确抵消,而音乐信号则完全不受影响。

图像压缩(JPEG)#

JPEG 使用的是离散余弦变换(DCT),它是 DFT 的实数版本。每个 $8\times 8$ 像素块会被表示成一组余弦正交基的系数。自然图像中高频系数通常很小,因此可以大幅量化甚至直接丢弃,从而压缩文件大小。正交性保证了丢弃某些系数时不会影响剩下的部分。

CDMA 移动通信#

每个用户分配到一个“码字”,不同用户的码字两两正交。多个用户可以同时共享同一频段。要从混合信号中提取用户 A 的信号,接收端只需将接收到的信号与 A 的码字做点积;用户 B 的信号会因为 $\vec{c}_A\cdot\vec{c}_B=0$ 而被完全消除。

PCA:找最重要的方向#

主成分分析(PCA)的目标是从数据中找到方差最大的若干正交方向。具体操作如下:对中心化的数据矩阵 $X$ ,计算协方差矩阵 $\Sigma=\frac{1}{n-1}X^TX$ ,然后对其进行特征分解,得到 $\Sigma=Q\Lambda Q^T$ 。其中,$Q$ 的列是互相正交的主轴,$\Lambda$ 中的特征值表示每个方向上的方差大小。保留前 $k$ 列即可实现最优的线性降维。

要求正交的原因是确保各主成分彼此独立——每个主成分都在捕捉新的信息,而不是重复之前已经表达过的内容。


Python 工具箱#

Gram-Schmidt 正交化#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np

def gram_schmidt(A):
    """经典 Gram-Schmidt 正交化方法

    A:矩阵,列向量是待正交化的向量
    返回 Q:列向量为标准正交基的矩阵
    """
    m, n = A.shape
    Q = np.zeros((m, n))
    for j in range(n):
        v = A[:, j].copy()
        for i in range(j):
            v -= (Q[:, i] @ A[:, j]) * Q[:, i]
        Q[:, j] = v / np.linalg.norm(v)
    return Q

A = np.array([[1, 1, 0],
              [1, 0, 1],
              [0, 1, 1]], dtype=float).T
Q = gram_schmidt(A)
print("Q^T Q(应为单位阵):\n", np.round(Q.T @ Q, 10))

使用 QR 分解求解最小二乘#

1
2
3
4
5
6
7
8
9
def least_squares_qr(A, b):
    """通过 QR 分解求解最小二乘问题(数值稳定)"""
    Q, R = np.linalg.qr(A)
    return np.linalg.solve(R, Q.T @ b)

x = np.array([1, 2, 3, 4, 5])
y = np.array([2.1, 3.9, 6.2, 7.8, 10.1])
A = np.column_stack([np.ones(len(x)), x])
print(least_squares_qr(A, y))

投影可视化#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import matplotlib.pyplot as plt

a = np.array([3.0, 1.0])
b = np.array([1.0, 3.0])
proj = (a @ b) / (a @ a) * a
err = b - proj

fig, ax = plt.subplots(figsize=(7, 7))
ax.quiver(0, 0, *a, angles='xy', scale_units='xy', scale=1, color='blue', label='a')
ax.quiver(0, 0, *b, angles='xy', scale_units='xy', scale=1, color='green', label='b')
ax.quiver(0, 0, *proj, angles='xy', scale_units='xy', scale=1, color='red', label='proj')
ax.quiver(*proj, *err, angles='xy', scale_units='xy', scale=1, color='orange', label='error')
ax.set_xlim(-1, 5); ax.set_ylim(-1, 5); ax.set_aspect('equal'); ax.grid(True); ax.legend()
plt.show()

练习题#

基础题#

  1. 检查$\vec{u}=(1,2,-1)$$\vec{v}=(2,-1,0)$ 是否正交。如果正交,将它们单位化。
  2. 计算$\vec{b}=(3,4)$$\vec{a}=(1,0)$ 上的投影,并确认误差向量与$\vec{a}$ 垂直。
  3. $\vec{a}_1=(1,1,0)$$\vec{a}_2=(1,0,1)$ 应用 Gram-Schmidt 方法,验证结果是否正交。

进阶题#

  1. 证明:一组非零正交向量必定线性无关。
  2. 证明$P=A(A^TA)^{-1}A^T$ 满足$P^2=P$ 。从几何角度说明为什么“投影两次等于投影一次”。
  3. 手动计算矩阵$A=\begin{pmatrix}1&1\\1&0\\0&1\end{pmatrix}$ 的 QR 分解,并验证$A=QR$
  4. 使用最小二乘法拟合点$(1,1),(2,3),(3,2),(4,4)$ 到直线$y=\beta_0+\beta_1 x$
  5. 证明两个正交矩阵的乘积仍然是正交矩阵。

编程题#

  1. 实现改进版 Gram-Schmidt 方法,并用接近线性相关的向量(比如 Hilbert 矩阵的列)比较它与经典方法的正交性误差。
  2. 模拟一个 3 用户 CDMA 系统,使用长度为 4 的正交码。通过点积分离每个用户的信号,验证正交码的“零干扰”特性。

总结#

概念关键公式简单理解
正交$\vec{u}\cdot\vec{v}=0$向量互不干扰
一维投影$\mathrm{proj}_{\vec{a}}\vec{b}=\dfrac{\vec{a}\cdot\vec{b}}{\vec{a}\cdot\vec{a}}\vec{a}$直线上的影子
子空间投影$\hat{\vec{b}}=A(A^TA)^{-1}A^T\vec{b}$子空间里离得最近的点
正规方程$A^TA\hat{\vec{x}}=A^T\vec{b}$最小二乘法的核心
Gram-Schmidt逐步减去投影去掉前面轴的影响
QR 分解$A=QR$稳定实现正交化的矩阵形式
正交矩阵$Q^TQ=I$长度和角度不变,条件数为 1

参考文献#

  • Strang, G. (2019). Introduction to Linear Algebra, 第 4、 10 章。
  • Trefethen, L. N. & Bau, D. (1997). Numerical Linear Algebra, Lectures 7–11。
  • 3Blue1Brown. Essence of Linear Algebra, 第 9、 11 集。
  • Golub, G. H. & Van Loan, C. F. (2013). Matrix Computations, 第 5 章
本系列

线性代数 18 篇

  1. 01 线性代数(一):向量的本质——不仅仅是箭头
  2. 02 线性代数(二):线性组合与向量空间
  3. 03 线性代数(三):矩阵作为线性变换
  4. 04 线性代数(四):行列式的秘密
  5. 05 线性代数(五):线性方程组与列空间
  6. 06 线性代数(六):特征值与特征向量
  7. 07 线性代数(七):正交性与投影——当向量互不干扰 当前
  8. 08 线性代数(八):对称矩阵与二次型
  9. 09 线性代数(九):奇异值分解 SVD
  10. 10 线性代数(十):矩阵范数与条件数——数值计算的健康体检
  11. 11 线性代数(十一):矩阵微积分与优化——从梯度到反向传播
  12. 12 线性代数(十二):稀疏矩阵与压缩感知——少即是多的数学奇迹
  13. 13 线性代数(十三):张量与多线性代数——从标量到高维数据立方体
  14. 14 线性代数(十四):随机矩阵理论——混沌中的秩序
  15. 15 线性代数(十五):机器学习中的线性代数——从 PCA 到推荐系统
  16. 16 线性代数(十六):深度学习中的线性代数——从全连接到 Transformer
  17. 17 线性代数(十七):计算机视觉中的线性代数——从像素到三维重建
  18. 18 线性代数(十八):前沿应用与总结——量子计算、GNN、大模型,与十八章回望

读有所得?

GitHub 关注我 → 新文周更

GitHub