ARTICLE

格拉姆-施密特正交化

格拉姆-施密特正交化 (Gram-Schmidt Orthogonalization) 格拉姆-施密特正交化(Gram-Schmidt Orthogonalization)是线性代数(Linear Algebra)中的一种经典算法。给定一个内积空间(Inner Product Space)中的一组线性无关向量,该算法可以构造出一组正交(或标准正交)向量,使得

浏览 0 更新 2025-10-26

格拉姆-施密特正交化 (Gram-Schmidt Orthogonalization)

格拉姆-施密特正交化(Gram-Schmidt Orthogonalization)是线性代数(Linear Algebra)中的一种经典算法。给定一个内积空间(Inner Product Space)中的一组线性无关向量,该算法可以构造出一组正交(或标准正交)向量,使得它们张成相同的子空间。该方法以丹麦数学家约尔根·格拉姆(Jørgen Gram,1850–1916)和德国数学家埃尔哈德·施密特(Erhard Schmidt,1876–1959)的名字命名。

基本思想

格拉姆-施密特正交化的核心思想是逐向量操作:从第一个向量开始,将每个后续向量减去它在已构造好的正交向量上的投影,从而消除与前面所有向量的相关性。用数学语言描述,设 v1,v2,,vnv_1, v_2, \dots, v_n 是内积空间 VV 中的一组线性无关向量,我们希望构造一组正交向量 u1,u2,,unu_1, u_2, \dots, u_n,使得对每个 kk,有 span{v1,,vk}=span{u1,,uk}\operatorname{span}\{v_1, \dots, v_k\} = \operatorname{span}\{u_1, \dots, u_k\}

正交化过程在几何上等价于反复进行正交投影分解。假设已得到前 k1k-1 个互为正交的向量 u1,,uk1u_1, \dots, u_{k-1},它们张成一个子空间 Uk1U_{k-1}。那么任意向量 vkv_k 可以唯一地分解为它在 Uk1U_{k-1} 上的投影分量与垂直于 Uk1U_{k-1} 的分量之和。算法保留的就是那个垂直分量——这正是我们需要的正交方向。此外,由于内积运算保证了投影的线性性质,整个过程的计算可以完全用简单的代数表达式完成,无需涉及几何绘图。

经典算法步骤

步骤一:u1=v1u_1 = v_1,即第一个正交向量直接取为第一个原始向量。

步骤二:k=2,3,,nk = 2, 3, \dots, n,依次计算:

uk=vkj=1k1vk,ujuj,ujuju_k = v_k - \sum_{j=1}^{k-1} \frac{\langle v_k, u_j \rangle}{\langle u_j, u_j \rangle} \, u_j

其中 ,\langle \cdot, \cdot \rangle 表示内积。这个减法的几何含义是:从 vkv_k 中移除它在已构造的正交向量 u1,,uk1u_1, \dots, u_{k-1} 所张成的子空间上的投影分量。每一步得到的 uku_k 自动与之前所有 uju_j 正交。

步骤三(可选):若需要标准正交基,可将每个 uku_k 归一化:

ek=ukuk=ukuk,uke_k = \frac{u_k}{\|u_k\|} = \frac{u_k}{\sqrt{\langle u_k, u_k \rangle}}

归一化后的向量组 {e1,,en}\{e_1, \dots, e_n\} 满足 ei,ej=δij\langle e_i, e_j \rangle = \delta_{ij},即单位正交基。

数值实例

考虑 R3\mathbb{R}^3 中的两个向量:v1=(1,1,0)v_1 = (1, 1, 0)^\topv2=(1,2,1)v_2 = (1, 2, 1)^\top,使用标准欧几里得内积。

u1=v1=(1,1,0)u_1 = v_1 = (1, 1, 0)^\top。计算投影系数:

v2,u1u1,u1=11+21+1012+12+02=32\frac{\langle v_2, u_1 \rangle}{\langle u_1, u_1 \rangle} = \frac{1\cdot 1 + 2\cdot 1 + 1\cdot 0}{1^2 + 1^2 + 0^2} = \frac{3}{2}

于是:

u2=v232u1=(1,2,1)(32,32,0)=(12,12,1)u_2 = v_2 - \frac{3}{2} u_1 = (1, 2, 1)^\top - \left(\frac{3}{2}, \frac{3}{2}, 0\right)^\top = \left(-\frac{1}{2}, \frac{1}{2}, 1\right)^\top

容易验证 u1,u2=1(12)+112+01=0\langle u_1, u_2 \rangle = 1\cdot(-\tfrac12) + 1\cdot\tfrac12 + 0\cdot 1 = 0,两个向量互相正交。若进一步归一化,可得 e1=(12,12,0)e_1 = (\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}, 0)^\tope2=(16,16,26)e_2 = (-\frac{1}{\sqrt{6}}, \frac{1}{\sqrt{6}}, \frac{2}{\sqrt{6}})^\top

几何解释

格拉姆-施密特正交化可以直观地理解为一组递推的正交投影操作。当处理第 kk 个向量 vkv_k 时,算法首先计算 vkv_k 到已构造子空间 Uk1=span{u1,,uk1}U_{k-1} = \operatorname{span}\{u_1, \dots, u_{k-1}\} 上的正交投影 projUk1(vk)\operatorname{proj}_{U_{k-1}}(v_k),然后令 uku_k 等于 vkv_k 与该投影的差——这正是垂直于该子空间的分量。由于每个 uku_k 都垂直于之前所有的 uju_j,最终得到的向量组自然构成正交基。在二维和三维空间中,这一过程可以形象地理解为逐一"扶正"向量,使其与已有方向垂直。

重要性质

唯一性:如果在每一步中强制要求 uk,ek>0\langle u_k, e_k \rangle > 0(即令正交方向与原始方向一致),则标准正交化的结果是唯一的。也就是说,对于给定的有序向量组,Gram-Schmidt 过程产生的正交基在归一化符号选择的意义下是唯一确定的。这一性质在QR分解(QR Decomposition)中尤为重要。

顺序依赖性:算法的结果依赖于向量的输入顺序。改变 v1,v2,,vnv_1, v_2, \dots, v_n 的顺序将得到不同的正交基,尽管它们张成同一个子空间。这在某些需要保持特定向量方向的应用中需要特别注意。

内积的依赖性:正交性概念依赖于所选取的内积。使用不同的内积定义会对同一组向量产生不同的正交化结果。例如,在函数空间中,选择不同的权函数进行内积定义,会得到不同的正交多项式序列。

与 QR 分解的关系:将原始向量按列排列成矩阵 AA,正交化过程等价于将 AA 分解为 A=QRA = QR,其中 QQ 的列是标准正交向量,RR 是上三角矩阵。具体地,RR 的对角元为 uk\|u_k\|,上三角元为投影系数 vk,ej\langle v_k, e_j \rangle

数值稳定性:经典的格拉姆-施密特算法在数值上可能不稳定。当向量接近线性相关时,舍入误差会迅速累积,导致计算出的向量失去正交性。为此,实际应用中常采用改良的格拉姆-施密特算法(Modified Gram-Schmidt,MGS),它在每一步将 vkv_k 依次减去在单个正交方向上的投影,而不是一次性减去全部投影。MGS 产生相同的结果矩阵,但数值稳定性显著提高。

应用

格拉姆-施密特正交化在数学、统计学和工程中有广泛的应用:

  • QR 分解:是求解最小二乘问题(Least Squares Problem)和特征值问题(如 QR 算法)的核心工具。它将矩阵分解为酉矩阵与上三角矩阵的乘积,极大简化了数值计算。
  • 构造正交多项式:对多项式基 {1,x,x2,}\{1, x, x^2, \dots\} 在适当的内积下进行正交化,可得到勒让德多项式(Legendre Polynomials)、切比雪夫多项式(Chebyshev Polynomials)、拉盖尔多项式(Laguerre Polynomials)和埃尔米特多项式(Hermite Polynomials)等经典正交多项式序列。这些多项式在数值积分(高斯求积法)、微分方程求解中扮演关键角色。
  • 数值线性代数:用于求解线性方程组、矩阵特征值问题,以及主成分分析(PCA)中的基变换。在 PCA 中,算法通过对协方差矩阵的特征向量进行正交化,提取出数据的主要变异方向。
  • 信号处理与通信:在多输入多输出(MIMO)系统的检测算法(如 V-BLAST)中,利用 Gram-Schmidt 过程对信道矩阵进行分解,以逐层消除天线间的干扰。
  • 计算机图形学:用于构造正交坐标系,辅助三维场景中的光照计算、相机定向和几何变换。

推广:格拉姆-施密特过程与希尔伯特空间

在内积空间理论中,格拉姆-施密特正交化过程可以推广到无限维的希尔伯特空间(Hilbert Space)。这是傅里叶分析(Fourier Analysis)和小波理论的基础:通过将函数空间中的一组线性无关函数正交化,可以构造出标准正交基,进而将任意函数展开为傅里叶级数或小波级数。例如,在区间 [π,π][-\pi, \pi] 上定义的三角函数系 {1,cosx,sinx,cos2x,sin2x,}\{1, \cos x, \sin x, \cos 2x, \sin 2x, \dots\} 本身就是标准正交基,而 Legendre 多项式则是在 [1,1][-1, 1] 上关于权函数 w(x)=1w(x) = 1{1,x,x2,}\{1, x, x^2, \dots\} 进行 Gram-Schmidt 正交化并归一化的结果。

算法实现(Python)

以下是一个简单的 Python 实现,演示经典 Gram-Schmidt 过程:

import numpy as np

def gram\_schmidt(A):
    """对矩阵 A 的列向量进行 Gram-Schmidt 正交化"""
    n, m = A.shape
    Q = np.zeros((n, m))
    for k in range(m):
        v = A[:, k].copy()
        for j in range(k):
            v -= np.dot(Q[:, j], A[:, k]) * Q[:, j]
        norm = np.linalg.norm(v)
        if norm > 1e-14:
            Q[:, k] = v / norm
    return Q

此代码返回标准正交矩阵 QQ,满足 QQ=IQ^\top Q = I。在实际工程中建议使用 NumPy 的 \texttt{np.linalg.qr},后者基于更为稳健的 Householder 反射或 MGS 算法。

需要注意的是,上述实现中内层循环使用了原始向量 A[:,k]A[:, k] 而非更新后的工作向量——这在经典 Gram-Schmidt 中是可行的,但在数值上容易放大误差。改良版本会在每次减去一个投影后立即更新工作向量,从而显著改善数值稳定性。

总结

格拉姆-施密特正交化是线性代数中最基本的算法之一,它架起了线性无关向量组与正交基之间的桥梁。无论是对矩阵进行 QR 分解、求解最小二乘问题,还是在函数空间中构造正交基,这一算法都发挥着不可替代的基础性作用。理解其几何直观和代数推导,是深入学习数值线性代数和泛函分析的起点。作为一个结合了理论与应用的优雅算法,Gram-Schmidt 过程完美体现了线性代数中"分解与投影"这一核心思想。