ARTICLE
格拉姆-施密特正交化
格拉姆-施密特正交化 (Gram-Schmidt Orthogonalization) 格拉姆-施密特正交化(Gram-Schmidt Orthogonalization)是线性代数(Linear Algebra)中的一种经典算法。给定一个内积空间(Inner Product Space)中的一组线性无关向量,该算法可以构造出一组正交(或标准正交)向量,使得
格拉姆-施密特正交化 (Gram-Schmidt Orthogonalization)
格拉姆-施密特正交化(Gram-Schmidt Orthogonalization)是线性代数(Linear Algebra)中的一种经典算法。给定一个内积空间(Inner Product Space)中的一组线性无关向量,该算法可以构造出一组正交(或标准正交)向量,使得它们张成相同的子空间。该方法以丹麦数学家约尔根·格拉姆(Jørgen Gram,1850–1916)和德国数学家埃尔哈德·施密特(Erhard Schmidt,1876–1959)的名字命名。
基本思想
格拉姆-施密特正交化的核心思想是逐向量操作:从第一个向量开始,将每个后续向量减去它在已构造好的正交向量上的投影,从而消除与前面所有向量的相关性。用数学语言描述,设 是内积空间 中的一组线性无关向量,我们希望构造一组正交向量 ,使得对每个 ,有 。
正交化过程在几何上等价于反复进行正交投影分解。假设已得到前 个互为正交的向量 ,它们张成一个子空间 。那么任意向量 可以唯一地分解为它在 上的投影分量与垂直于 的分量之和。算法保留的就是那个垂直分量——这正是我们需要的正交方向。此外,由于内积运算保证了投影的线性性质,整个过程的计算可以完全用简单的代数表达式完成,无需涉及几何绘图。
经典算法步骤
步骤一:令 ,即第一个正交向量直接取为第一个原始向量。
步骤二:对 ,依次计算:
其中 表示内积。这个减法的几何含义是:从 中移除它在已构造的正交向量 所张成的子空间上的投影分量。每一步得到的 自动与之前所有 正交。
步骤三(可选):若需要标准正交基,可将每个 归一化:
归一化后的向量组 满足 ,即单位正交基。
数值实例
考虑 中的两个向量:,,使用标准欧几里得内积。
取 。计算投影系数:
于是:
容易验证 ,两个向量互相正交。若进一步归一化,可得 ,。
几何解释
格拉姆-施密特正交化可以直观地理解为一组递推的正交投影操作。当处理第 个向量 时,算法首先计算 到已构造子空间 上的正交投影 ,然后令 等于 与该投影的差——这正是垂直于该子空间的分量。由于每个 都垂直于之前所有的 ,最终得到的向量组自然构成正交基。在二维和三维空间中,这一过程可以形象地理解为逐一"扶正"向量,使其与已有方向垂直。
重要性质
唯一性:如果在每一步中强制要求 (即令正交方向与原始方向一致),则标准正交化的结果是唯一的。也就是说,对于给定的有序向量组,Gram-Schmidt 过程产生的正交基在归一化符号选择的意义下是唯一确定的。这一性质在QR分解(QR Decomposition)中尤为重要。
顺序依赖性:算法的结果依赖于向量的输入顺序。改变 的顺序将得到不同的正交基,尽管它们张成同一个子空间。这在某些需要保持特定向量方向的应用中需要特别注意。
内积的依赖性:正交性概念依赖于所选取的内积。使用不同的内积定义会对同一组向量产生不同的正交化结果。例如,在函数空间中,选择不同的权函数进行内积定义,会得到不同的正交多项式序列。
与 QR 分解的关系:将原始向量按列排列成矩阵 ,正交化过程等价于将 分解为 ,其中 的列是标准正交向量, 是上三角矩阵。具体地, 的对角元为 ,上三角元为投影系数 。
数值稳定性:经典的格拉姆-施密特算法在数值上可能不稳定。当向量接近线性相关时,舍入误差会迅速累积,导致计算出的向量失去正交性。为此,实际应用中常采用改良的格拉姆-施密特算法(Modified Gram-Schmidt,MGS),它在每一步将 依次减去在单个正交方向上的投影,而不是一次性减去全部投影。MGS 产生相同的结果矩阵,但数值稳定性显著提高。
应用
格拉姆-施密特正交化在数学、统计学和工程中有广泛的应用:
- QR 分解:是求解最小二乘问题(Least Squares Problem)和特征值问题(如 QR 算法)的核心工具。它将矩阵分解为酉矩阵与上三角矩阵的乘积,极大简化了数值计算。
- 构造正交多项式:对多项式基 在适当的内积下进行正交化,可得到勒让德多项式(Legendre Polynomials)、切比雪夫多项式(Chebyshev Polynomials)、拉盖尔多项式(Laguerre Polynomials)和埃尔米特多项式(Hermite Polynomials)等经典正交多项式序列。这些多项式在数值积分(高斯求积法)、微分方程求解中扮演关键角色。
- 数值线性代数:用于求解线性方程组、矩阵特征值问题,以及主成分分析(PCA)中的基变换。在 PCA 中,算法通过对协方差矩阵的特征向量进行正交化,提取出数据的主要变异方向。
- 信号处理与通信:在多输入多输出(MIMO)系统的检测算法(如 V-BLAST)中,利用 Gram-Schmidt 过程对信道矩阵进行分解,以逐层消除天线间的干扰。
- 计算机图形学:用于构造正交坐标系,辅助三维场景中的光照计算、相机定向和几何变换。
推广:格拉姆-施密特过程与希尔伯特空间
在内积空间理论中,格拉姆-施密特正交化过程可以推广到无限维的希尔伯特空间(Hilbert Space)。这是傅里叶分析(Fourier Analysis)和小波理论的基础:通过将函数空间中的一组线性无关函数正交化,可以构造出标准正交基,进而将任意函数展开为傅里叶级数或小波级数。例如,在区间 上定义的三角函数系 本身就是标准正交基,而 Legendre 多项式则是在 上关于权函数 对 进行 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
此代码返回标准正交矩阵 ,满足 。在实际工程中建议使用 NumPy 的 \texttt{np.linalg.qr},后者基于更为稳健的 Householder 反射或 MGS 算法。
需要注意的是,上述实现中内层循环使用了原始向量 而非更新后的工作向量——这在经典 Gram-Schmidt 中是可行的,但在数值上容易放大误差。改良版本会在每次减去一个投影后立即更新工作向量,从而显著改善数值稳定性。
总结
格拉姆-施密特正交化是线性代数中最基本的算法之一,它架起了线性无关向量组与正交基之间的桥梁。无论是对矩阵进行 QR 分解、求解最小二乘问题,还是在函数空间中构造正交基,这一算法都发挥着不可替代的基础性作用。理解其几何直观和代数推导,是深入学习数值线性代数和泛函分析的起点。作为一个结合了理论与应用的优雅算法,Gram-Schmidt 过程完美体现了线性代数中"分解与投影"这一核心思想。