try ai
科普
编辑
分享
反馈
  • 经典格拉姆-施密特过程

经典格拉姆-施密特过程

SciencePedia玻尔百科
核心要点
  • 经典格拉姆-施密特过程是一种直观的算法,它通过依次减去向量在先前已正交化向量上的投影来构建标准正交基。
  • 在实践中,由于灾难性抵消误差,当初始向量近似线性相关时,该算法在数值上不稳定,无法产生正交集。
  • 尽管最终得到的正交因子 Q 可能不准确,但 QR 分解的乘积仍然是原始矩阵的一个良好近似,这使得该过程是后向稳定的。
  • 经典格拉姆-施密特过程的不稳定性可以通过使用更稳健的算法来缓解,例如修正的格拉姆-施密特 (MGS) 过程或再正交化。
  • 该过程在数据分析和信号处理等多个领域中至关重要,但在非欧几里得几何(如时空)中无效,因为在这些几何中向量的长度可以为零或负数。

引言

格拉姆-施密特过程是线性代数的基石,被誉为一种从混乱中锻造秩序的基础方法。它提供了一套优雅、循序渐进的方案,可将任何一组独立向量转化为一个标准正交基——一套用于度量向量空间的完美的垂直标尺。尽管其理论上的纯粹性是数学课堂上的经典内容,但在黑板与计算机之间却出现了一道关键的鸿沟。当在数字计算的有限世界中实现时,这个美丽的理论却隐藏着一个根深蒂固的缺陷:一种深刻的数值不稳定性,足以削弱其根本目的。

本文深入探讨经典格拉姆-施密特过程的双重性,旨在弥合其简单的几何概念与复杂的实际行为之间的差距。您不仅将探索该算法的工作原理,更重要的是,还将了解它为何有时会失效。

首先,在“原理与机制”一章中,我们将剖析该方法背后的几何直觉,将其形式化为算法,并揭示导致其在浮点数运算中失效的灾难性抵消的微妙机制。随后,“应用与跨学科联系”一章将展示这种不稳定性在从数据科学到数字通信等领域所产生的深远影响,揭示为何理解这一过程对于现代科学和工程工作至关重要。

原理与机制

借助投影构建:几何思想

想象你有一堆朝向不同方向的木棍。你的目标是用一套新的木棍来替换它们,这些新木棍彼此之间都成完美的直角——数学家称之为​​标准正交基​​——但又能以某种方式捕捉与原始木棍集合相同的“空间”。你会怎么做?

经典格拉姆-施密特过程提供了一个非常直观的解决方案。这是一个你可以亲手操作,或者至少在脑海中想象的过程。

取第一根木棍 a1a_1a1​。让我们把它作为基础。我们决定它的方向是我们新的正交世界的第一个方向。我们只需要确保它有一个标准的长度——长度为一。所以,我们计算它的长度 ∥a1∥\|a_1\|∥a1​∥,并通过将 a1a_1a1​ 缩放到单位长度来创建我们的第一个新向量 q1q_1q1​:q1=a1/∥a1∥q_1 = a_1 / \|a_1\|q1​=a1​/∥a1​∥。

现在,取第二根木棍 a2a_2a2​。它可能相对于 q1q_1q1​ 是倾斜的。为了使它与 q1q_1q1​ 正交,我们需要移除它在 q1q_1q1​ 方向上的任何部分。可以这样想:如果太阳正好在 q1q_1q1​ 的正上方,那么 a2a_2a2​ 会沿着 q1q_1q1​ 的直线投下一个“影子”。这个影子就是 a2a_2a2​ 平行于 q1q_1q1​ 的分量。用向量的语言来说,这个影子就是 a2a_2a2​ 在 q1q_1q1​ 上的​​投影​​。它的长度由点积 q1Ta2q_1^T a_2q1T​a2​ 给出,而向量本身是 (q1Ta2)q1(q_1^T a_2) q_1(q1T​a2​)q1​。

为了得到 a2a_2a2​ 中纯粹垂直于 q1q_1q1​ 的部分,我们只需减去这个影子:

u2=a2−(q1Ta2)q1u_2 = a_2 - (q_1^T a_2) q_1u2​=a2​−(q1T​a2​)q1​

这个新向量 u2u_2u2​ 现在与 q1q_1q1​ 成完美的直角。它包含了 a2a_2a2​ 中所有未曾出现在 a1a_1a1​ 中的“新”方向信息。剩下要做的就是将其缩放到标准的单位长度,我们就得到了第二个基向量:q2=u2/∥u2∥q_2 = u_2 / \|u_2\|q2​=u2​/∥u2​∥。

过程就这样继续下去。对于第三个向量 a3a_3a3​,我们减去它在 q1q_1q1​ 上的影子和在 q2q_2q2​ 上的影子。剩下的部分 u3u_3u3​ 与两者都正交。我们将其单位化得到 q3q_3q3​,依此类推。在每一步 kkk,我们取原始向量 aka_kak​ 并减去它在所有先前构建的正交向量 q1,…,qk−1q_1, \dots, q_{k-1}q1​,…,qk−1​ 上的投影。剩下的部分就是 aka_kak​ 中独特且与之前所有向量都正交的部分。这是一个奇妙的、循序渐进的空间净化过程。

算法:分步指南

让我们把这写成一个正式的流程,即​​经典格拉姆-施密特 (CGS)​​ 算法。给定一个 mmm 维空间中的向量集合 {a1,a2,…,an}\{a_1, a_2, \dots, a_n\}{a1​,a2​,…,an​}:

对于 k=1,2,…,nk = 1, 2, \dots, nk=1,2,…,n:

  1. ​​正交化​​:通过取 aka_kak​ 并减去其在所有先前基向量上的投影,创建一个中间向量 uku_kuk​:
    uk=ak−∑j=1k−1(qjTak)qju_k = a_k - \sum_{j=1}^{k-1} (q_j^T a_k) q_juk​=ak​−j=1∑k−1​(qjT​ak​)qj​
  2. ​​单位化​​:计算这个新正交向量的长度 rkk=∥uk∥2r_{kk} = \|u_k\|_2rkk​=∥uk​∥2​,并将其缩放到单位长度以得到下一个基向量:
    qk=ukrkkq_k = \frac{u_k}{r_{kk}}qk​=rkk​uk​​

这个过程产生了一组标准正交向量 {q1,…,qn}\{q_1, \dots, q_n\}{q1​,…,qn​} 和一组投影系数,这些系数构成一个上三角矩阵 RRR。原始向量可以从这些新部分中完美地重构出来:A=QRA = QRA=QR。这就是著名的 ​​QR 分解​​。

当然,计算机处理的不是影子和木棍,而是数字和运算。这需要多大的计算量?对于 mmm 维空间中的 nnn 个向量,浮点运算(flops)——即基本的加法和乘法——的数量主要由投影和减法步骤决定。仔细计算表明,总成本约为 2mn22mn^22mn2 次浮点运算。如果你有 100 个 1000 维空间中的向量,运算量大约在 2000 万次。对于现代计算机来说,这是一个可观但可控的工作量。

数字中的秘密

该算法不仅给了我们正交向量 qkq_kqk​,还给了我们在每个单位化步骤中的长度 rkkr_{kk}rkk​。这些数字不仅仅是可有可无的缩放因子,它们蕴含着一个深刻的几何秘密。

值 rkk=∥uk∥2r_{kk} = \|u_k\|_2rkk​=∥uk​∥2​ 表示在我们移除了 aka_kak​ 在先前向量方向上的所有分量后“剩下”的部分的长度。换句话说,​​∣rkk∣|r_{kk}|∣rkk​∣ 是从向量 aka_kak​ 的顶端到由其之前所有向量 {a1,…,ak−1}\{a_1, \dots, a_{k-1}\}{a1​,…,ak−1​} 所张成的子空间的最短距离​​。

它是衡量向量 aka_kak​ “新颖性”或“独创性”的指标。如果 rkkr_{kk}rkk​ 很大,意味着 aka_kak​ 指向一个与早期向量非常不同的方向。如果 rkkr_{kk}rkk​ 非常小,意味着 aka_kak​ 已经非常接近其他向量所在的子空间;它几乎是多余的。如果在精确算术中,我们发现 rkk=0r_{kk} = 0rkk​=0,这就告诉我们一个深刻的事实:向量 aka_kak​ 完全依赖于之前的向量。它根本没有提供新的维度,我们那套木棍并不像我们想象的那么丰富。

当巨人低语:近似对齐的问题

格拉姆-施密特思想的优雅似乎好得令人难以置信。而在我们不完美的计算世界里,的确如此。当我们的初始向量近似对齐——也就是说,几乎线性相关时,这个美丽的基础就会出现裂痕。

想象两个向量,v1=(11)v_1 = \begin{pmatrix} 1 \\ 1 \end{pmatrix}v1​=(11​) 和 v2=(11+δ)v_2 = \begin{pmatrix} 1 \\ 1+\delta \end{pmatrix}v2​=(11+δ​),其中 δ\deltaδ 是一个非常非常小的数。它们指向几乎相同的方向。格拉姆-施密特过程告诉我们,要找到 v2v_2v2​ 中与 v1v_1v1​ 正交的部分。从几何上看,这个正交分量是微不足道的,其长度与 δ\deltaδ 成正比。

现在,让我们思考一下计算机在做什么。它从一个大小合理的向量 v2v_2v2​(其范数约为 2\sqrt{2}2​)开始,必须通过减法产生一个范数极小的向量 u2u_2u2​。输入范数与输出范数的比值 ∥v2∥/∥u2∥\|v_2\| / \|u_2\|∥v2​∥/∥u2​∥ 可以被看作一个​​放大因子​​。对于这两个向量,这个因子大约是 2/(δ/2)=2/δ\sqrt{2} / (\delta/\sqrt{2}) = 2/\delta2​/(δ/2​)=2/δ。随着 δ\deltaδ 越来越小,这个因子会趋向于无穷大。

这是一个警示信号。初始测量或计算机计算中的任何微小误差都将被极大地放大。我们正试图在两个咆哮的巨人之间寻找一丝微弱的差异。

数字幽灵:灾难性抵消

这就是计算机存储数字的方式——​​浮点数运算​​——以戏剧性的后果进入故事的地方。计算机不会以无限精度存储数字,它可能存储,比如说,5 位或 16 位有效数字。这个限制正是问题的根源。

让我们来看一个类似于计算机科学家可能会做的思想实验的场景。假设我们的计算机只能存储 5 位有效数字。我们使用两个非常接近的向量:

v1=(110−30),v2=(1−10−30)v_1 = \begin{pmatrix} 1 \\ 10^{-3} \\ 0 \end{pmatrix}, \quad v_2 = \begin{pmatrix} 1 \\ -10^{-3} \\ 0 \end{pmatrix}v1​=​110−30​​,v2​=​1−10−30​​

第一步没问题。我们单位化 v1v_1v1​ 得到 q1q_1q1​。因为 10−310^{-3}10−3 非常小,所以 ∥v1∥2=12+(10−3)2=1.000001\|v_1\|^2 = 1^2 + (10^{-3})^2 = 1.000001∥v1​∥2=12+(10−3)2=1.000001。四舍五入到 5 位有效数字,这只是 1.00001.00001.0000。所以我们计算出的 q^1\hat{q}_1q^​1​ 与 v1v_1v1​ 相同。

现在是关键的一步。我们计算 v2v_2v2​ 在 q^1\hat{q}_1q^​1​ 上的投影:

q^1Tv2=(1)(1)+(10−3)(−10−3)=1−10−6=0.999999\hat{q}_1^T v_2 = (1)(1) + (10^{-3})(-10^{-3}) = 1 - 10^{-6} = 0.999999q^​1T​v2​=(1)(1)+(10−3)(−10−3)=1−10−6=0.999999

我们的 5 位数计算器必须对这个结果进行四舍五入,它变成了 1.00001.00001.0000。

计算机在其数字盲目性中,现在认为投影恰好是 1.00001.00001.0000。它继续从 v2v_2v2​ 中减去这个投影:

u^2=v2−(1.0000)q^1=(1−10−30)−(110−30)=(0−2×10−30)\hat{u}_2 = v_2 - (1.0000) \hat{q}_1 = \begin{pmatrix} 1 \\ -10^{-3} \\ 0 \end{pmatrix} - \begin{pmatrix} 1 \\ 10^{-3} \\ 0 \end{pmatrix} = \begin{pmatrix} 0 \\ -2 \times 10^{-3} \\ 0 \end{pmatrix}u^2​=v2​−(1.0000)q^​1​=​1−10−30​​−​110−30​​=​0−2×10−30​​

看看发生了什么。第一个分量中的减法 1−11 - 11−1 是​​灾难性抵消​​的一个例子。两个数最重要的数字完全相同并相互抵消,只留下了较不重要数字的“噪声”。真正的答案应该有一个与 10−610^{-6}10−6 相关的小分量,但该信息在四舍五入步骤中永远丢失了。

这个错误并非随机的,它有其结构。我们造成的舍入误差导致我们未能完全移除 v2v_2v2​ 中平行于 q1q_1q1​ 的部分。一个 q1q_1q1​ 的“幽灵”已经渗入到我们本应是正交的向量 u^2\hat{u}_2u^2​ 中。

美丽的理论,有缺陷的现实

这个数字幽灵的后果是什么?当我们单位化我们计算出的向量 q^1\hat{q}_1q^​1​ 和 q^2\hat{q}_2q^​2​ 时,我们发现它们根本不正交!在上面的例子中,点积 q^1Tq^2\hat{q}_1^T \hat{q}_2q^​1T​q^​2​ 的结果是 −1.0000×10−3-1.0000 \times 10^{-3}−1.0000×10−3,与我们期望的零相去甚远。在其他情况下,点积可能高达 0.5 甚至更高。算法在其主要任务上失败了:产生一个正交集。

在这里,我们遇到了一个数值分析中奇妙的悖论。大量的分析表明,尽管计算出的 QQQ 矩阵可能非常不正交,但乘积 Q^R^\hat{Q}\hat{R}Q^​R^ 仍然是原始矩阵 AAA 的一个极好的近似。误差 ∥A−Q^R^∥\|A - \hat{Q}\hat{R}\|∥A−Q^​R^∥ 总是很小,在机器精度的量级上。

这意味着经典格拉姆-施密特过程是​​后向稳定​​的:它为一个稍微错误的问题给出了几乎完全正确的答案。然而,因子 QQQ 本身,也就是我们试图构建的东西,可能毫无用处。这种“无用”的程度——即正交性的丧失——与一个称为矩阵 AAA 的​​条件数​​的量成正比。这个数字衡量了初始向量接近线性相关的程度。对于近似对齐的向量,条件数巨大,正交性的丧失是灾难性的。

救赎之路

这个失败的故事并非终点。这是科学中的一个经典故事:理解问题的机制是解决它的第一步。

一个简单而巧妙的修正方法是​​修正的格拉姆-施密特 (MGS)​​ 算法。它执行与 CGS 完全相同数量的运算,但顺序不同。MGS 不是取一个向量 aka_kak​ 然后一次性减去所有投影,而是依次对向量进行正交化。在产生 q1q_1q1​ 之后,它立即从所有后续向量(a2,a3,…,ana_2, a_3, \dots, a_na2​,a3​,…,an​)中移除 q1q_1q1​ 的分量。然后它从修改后的 a2a_2a2​ 产生 q2q_2q2​,并从修改后的向量 a3,…,ana_3, \dots, a_na3​,…,an​ 中移除新的 q2q_2q2​ 分量,依此类推。

这种循环顺序上的看似微小的改变产生了深远的影响。它作用于已经被部分清理过的向量,防止了两个大的、几乎相等的数字相减。当在同样病态的问题上进行测试时,MGS 产生的 QQQ 矩阵正交性接近机器精度。

另一种更直接的方法叫做​​再正交化​​。该策略承认第一次正交化尝试可能存在缺陷。它包含一个检查:在减法步骤中,向量的范数是否急剧缩小?如果是,这就是灾难性抵消的警示信号。解决方案?再做一次。取有缺陷的向量 u^k\hat{u}_ku^k​ 并再次通过投影和减法过程。这第二遍操作清除了在第一遍中渗入的“幽灵”分量,将正交性恢复到很高的程度。

格拉姆-施密特过程的历程是计算科学的一个完美寓言。它始于一个纯粹、几何优雅的想法。它与计算的有限、混乱的现实发生碰撞,导致一种令人惊讶和微妙的失效模式。最后,对这种失效的更深理解带来了巧妙而稳健的解决方案。美不仅在于最初的想法,还在于其不完美与救赎的整个故事。

应用与跨学科联系

在上一章中,我们熟悉了经典格拉姆-施密特过程。我们看到它是一个极其简单、循序渐进的方法,能够将一组杂乱的向量转化为一个纯净的标准正交集——一套我们可以用来衡量空间的垂直标尺。这个过程,在黑板上的纯粹形式中,是几何优雅的典范。但我们也捕捉到了它悲剧性缺陷的蛛丝马迹:当从完美符号的世界转换到计算机算术的有限世界时,这个优雅的过程可能会变得极其不稳定。

现在,我们将踏上一段旅程,去看看这为什么重要。我们将发现,正交化这个简单的想法不仅仅是一个课堂练习,它还是众多科学和工程领域的核心概念。我们将看到,它在面对舍入误差时的脆弱性,不仅仅是一个学术上的好奇心,而是从数据科学到数字通信等领域的一个核心挑战。在理解其局限性以及我们为克服它们而学到的巧妙方法中,我们将对计算科学这门艺术获得更深的欣赏。

从数据中提炼精华

想象一下,你是一位试图理解人类福祉的社会科学家。你进行了一项有数千名参与者的调查,要求他们对自己的“生活满意度”和“日常幸福感”进行 1 到 10 的评分。你收集了数据,每个问题都对应一长列数字——一个高维“参与者空间”中的向量。直觉上,你知道满意度和幸福感是相关的,但它们并不完全相同。代表它们的向量会指向相似但非完全相同的方向。它们是相关的。

你如何才能找到这些相关响应背后“纯粹”的、独立的因素呢?这就是正交化发挥作用的地方。通过对“满意度”和“幸福感”的向量应用格拉姆-施密特过程,你实际上是在说:“让我们把‘满意度’向量作为我们的第一个基本方向。现在,‘幸福感’向量的哪一部分是新的?哪一部分指向与‘满意度’完全垂直的方向?”这个新的、正交的方向代表了幸福感中与满意度统计上独立的分量。这个过程是像因子分析这类技术的基石,它使我们能够从一个杂乱、相互关联的数据网络中提炼出其基本的、不相关的成分。它是一种数学工具,用于在从调查数据到股市回报的各种事物中发现真正的潜在结构。

完美的危险:稳定性危机

这听起来很棒,但当我们开始在现实世界中应用格拉姆-施密特过程时,我们便一头撞上了它的数值脆弱性。当该算法被要求对一组已经近似平行的向量进行正交化时,它的阿喀琉斯之踵就暴露无遗了。

为什么会发生这种情况?想象一个物理系统,也许是一根振动的弦或一个电路,其行为由一个矩阵 AAA 描述。系统的状态随时间演变,我们可以通过一系列向量来追踪其路径:一个初始状态 vvv,然后是 AvAvAv,再是 A2vA^2vA2v,依此类推。这个序列形成了一个所谓的克雷洛夫子空间 (Krylov subspace)。如果系统有两种振动模式的频率非常相似(或者,用数学术语来说,如果矩阵 AAA 的特征值非常接近),那么系统沿这两种模式的演化将几乎相同。向量 v,Av,A2v,…v, Av, A^2v, \dotsv,Av,A2v,… 将会聚集在一起,变得几乎无法区分。试图在一捆几乎平行的向量中找到垂直方向,就像试图在一把紧密包装的扫帚中区分单个秸秆的方向一样。

这就是经典格拉姆-施密特过程的绊脚石。为了找到向量 aja_jaj​ 的新方向,CGS 计算 aj−∑i⟨aj,qi⟩qia_j - \sum_i \langle a_j, q_i \rangle q_iaj​−∑i​⟨aj​,qi​⟩qi​。如果 aja_jaj​ 几乎完全包含在先前向量 {qi}\{q_i\}{qi​} 的子空间中,那么投影之和 ∑i⟨aj,qi⟩qi\sum_i \langle a_j, q_i \rangle q_i∑i​⟨aj​,qi​⟩qi​ 就是一个与 aja_jaj​ 几乎相同的向量。计算机被迫减去两个非常大且几乎相等的数字。这个操作,被称为​​灾难性抵消​​,会抹去大部分有效数字,留下的结果主要由舍入误差主导。由此产生的新的“正交”向量根本不正交;它保留了先前向量方向上的伪分量,基的正交性也就丧失了。

面对这种失败,科学界并没有放弃这个想法,而是对其进行了改进。其中最重要的发展之一是​​修正的格拉姆-施密特 (MGS)​​ 过程。MGS 在数学上与 CGS 等价,但它重新组织了减法运算,使其在数值上更稳定。MGS 不是对每个新向量一次性减去所有先前的投影,而是取一个新产生的正交向量 qjq_jqj​,并立即从集合中所有后续向量中减去它的分量。这种迭代式的净化过程防止了误差的累积,并在很大程度上保持了正交性。

其他更强大的方法也随之被开发出来。一些算法只是将 CGS 的思想应用两次——这个过程被称为​​再正交化​​——它能奇迹般地将正交性恢复到接近机器精度。另一类方法,基于​​豪斯霍尔德变换 (Householder reflections)​​,则完全放弃了投影和减法的思想。它不是逐一剥离分量,而是使用几何反射——就像一面完美放置的镜子——通过一次稳定操作将整个向量翻转到期望的方向。对于许多大规模的科学计算,这些更稳健的算法已成为黄金标准。

高风险的计算

这些算法之间的区别并不仅仅是学术性的。在许多领域,数值稳定性至关重要,正交化步骤的失败可能会带来灾难性的后果。

考虑​​最小二乘问题​​,即为一组数据点找到“最佳拟合”直线或曲线的任务。这可以说是所有实验科学中最常见的任务之一。解决这个问题的一个朴素方法是构建所谓的“正规方程”。事实证明,这种方法在数值上等同于使用不稳定的经典格拉姆-施密特过程。它会遭受“条件数的平方”效应,这意味着如果原始问题已经有些敏感(病态的),正规方程会创建一个敏感度急剧增加的问题,将舍入误差放大到灾难性的程度。使用基于更稳定算法(如豪斯霍尔德变换)的 QR 分解可以避免这种灾难性的放大,从而得到更可靠的答案。

在​​数字信号处理​​中,工程师设计复杂的滤波器来从音频、图像和通信的噪声中分离出信号。许多高级滤波器被设计成“格状结构”,由一系列基本单元级联而成。每个单元必须是“无损的”或“准酉的”,这意味着它完美地保持了通过它的信号的能量。这些单元是使用正交化过程设计的。如果使用像 CGS 这样的不稳定算法,累积的舍入误差可能会破坏能量守恒属性。一个计算出的本应幅值小于 1 的参数,最终可能大于 1,从而把一个本应稳定的滤波器变成一个会爆炸的放大器。其结果不仅仅是一个稍微不准确的答案,而是一个完全无法工作的设备。

即使在​​机器学习​​的抽象世界里,这些思想也是核心。“核技巧”允许我们在极高维的“特征空间”中进行计算(如正交化),而无需显式地计算那里的向量。我们可以通过操作一个核计算矩阵——格拉姆矩阵 (Gram matrix)——来找到正交的“函数”。在这里,出现了一种新的不稳定性:如果我们输入集中的两个数据点几乎相同,那么特征空间中相应的向量也会变得几乎平行。这再次导致了一个病态的格拉姆-施密特过程。在这个领域,解决方案通常不仅仅是使用更好的算法,而是通过​​正则化​​来稍微改变问题本身。通过向格拉姆矩阵添加一个微小的单位矩阵倍数(λI\lambda IλI),我们有效地为每个方向增加了一个小的、独立的分量,将所有向量稍微推开,从而使正交化过程再次变得稳定。

超越欧几里得:弯曲时空中的格拉姆-施密特

也许最深刻的洞见来自于我们追问:格拉姆-施密特过程到底在什么条件下才有意义?该算法建立在两个基本操作之上:计算向量的长度 ∥v∥=⟨v,v⟩\lVert v \rVert = \sqrt{\langle v, v \rangle}∥v∥=⟨v,v⟩​,以及将一个向量投影到另一个向量上,这也涉及内积 ⟨u,v⟩\langle u, v \rangle⟨u,v⟩。整个过程都基于一个假设:任何非零向量的长度平方都是一个正数。在我们日常直觉的欧几里得几何中,这是不言自明的。

但在爱因斯坦广义相对论所描述的宇宙中,这并非事实。时空是一个洛伦兹流形,一个四维空间,其中的“距离”或度量不是正定的。它具有 (−,+,+,+)(-,+,+,+)(−,+,+,+) 的符号差。这意味着对于一个向量 vvv,量 g(v,v)g(v, v)g(v,v) 可以是正的(对于“类空向量”)、负的(对于“类时向量”),或者——最关键的是——即使对于非零向量也可以是零。这些是​​零向量​​,它们描述了光线的路径。

如果你试图在时空中应用标准的格拉姆-施密特过程,并且遇到了一个零向量 uuu,算法会戛然而止。单位化步骤 q=u/g(u,u)q = u / \sqrt{g(u,u)}q=u/g(u,u)​ 要求你除以零。在欧几里得空间中完美工作的简单几何方法彻底失败了。这教会了我们一些深刻的东西:我们的数学工具并非普适的抽象概念;它们与它们所操作的空间的几何结构紧密相连。为了在时空中构建一个“标准正交”标架,物理学家必须使用一个经过修改的程序,该程序明确处理类时、类空和零方向。

从分析调查数据到模拟宇宙,使向量垂直这个简单的行为是一个反复出现的基本主题。经典格拉姆-施密特过程提供了优美、直观的模板。它在数字领域的失败教会我们关于有限精度算术的微妙危险,而为克服这些失败而设计的巧妙算法则是计算科学家智慧的证明。这是一个来自纯粹数学的美丽思想与物理和计算世界的混乱现实相遇的完美故事,并在此过程中,揭示了科学间更深层次的统一性。