格拉姆-施密特正交化
设想两个向量斜靠在一起。它们张成同一个平面,可是彼此不垂直,长度也各不相同,算起来不方便。格拉姆-施密特是把这组歪斜的基拉直的步骤。第一个方向原样留下,从第二个向量里减去它投在第一个方向上的影子,也就是投影。于是只剩下与第一个垂直的分量。最后把两者的长度都配成 1,就得到直角相交的单位标架。阶段图一步步走完倾斜的两个向量怎样变成标准正交。这样拉直的框架就是 QR 分解的 Q。金色是投影,橙色是减去之后的剩余。绿色是先配好长度的单位向量。
用按钮一步步走。0 阶段是斜的输入 a1、a2 原样。1 阶段把 a1 缩到长度 1,做出第一个绿色单位向量 u1。2 阶段把 a2 投向 u1 的影子,也就是投影 (a2·u1)u1,画成金色。它显示 a2 里面含有多少 u1 方向。3 阶段从 a2 减去那个投影,把剩下的垂直分量 w 涂成橙色,长度配成 1,得到第二个单位向量 u2。现在 u1 和 u2 恰好直角相交。歪斜的两个被拉成一对笔直的标准正交。
只拿格拉姆-施密特的核心动作。把 u1 固定成 x 轴上的单位向量,随意拖动蓝色向量 a2。金色箭头是 a2 投在 u1 上的投影 (a2·u1)u1。它只抽出 a2 里面的 u1 分量。橙色箭头是减去投影之后的剩余,a2 减去投影。无论把 a2 拖到哪里,这根橙色剩余始终与 u1 恰好垂直。减去投影,平行分量消失,只留下垂直分量。这一次减法,就是把歪斜的第二个向量立起来的心脏。
看输入多么歪斜,输出仍然笔直。固定 a1,用滑块转动 a2 的倾角。两根淡的向量是斜的输入 a1、a2,画得深的直角单位标架 u1、u2 是格拉姆-施密特拉直的输出。无论怎样倾斜输入,输出的 u1 和 u2 始终长度是 1,并且彼此垂直。有一个危险的位置。把 a2 弄得几乎与 a1 平行,要张的平面消失,垂直分量接近 0。那一刻做不出标准正交标架,警告出现。几乎平行的基拉不直。警告出现的地方,是两支箭头叠在一起的地方。蓝色箭头转得越多,金色投影的长度越变。按钮的顺序就是步骤的顺序。数字板上的列,就是图里的两支箭头。橙色的剩余造出第二个方向。绿列和橙列就是那两个单位向量。
格拉姆-施密特从哪一个向量出发,结果就不同。因为第一个向量的方向原样保留。用按钮改变出发的顺序。先取 a1,u1 就顺着 a1 的方向,u2 立在它的直角上。先取 a2,u1 就顺着 a2,u2 成为那个直角。同样的两个输入张成同一个平面,造出的标准正交标架却彼此转得不同。两者都是正确的标准正交基。这个步骤以第一个方向为锚,把谁叫做第一,就决定了答案。
把拉直的两个单位向量收进一个矩阵。用按钮逐个打开 u1、u2,它们分别坐进矩阵 Q 的第 1 列和第 2 列。下方的数字板写出这个 2×2 的 Q,绿色列是 u1,橙色列是 u2。Q 的两列是彼此垂直的单位向量,所以 Q 是既不动长度也不动角度的旋转,也就是正交矩阵。因此 Qᵀ Q = I。这样收拢的 Q 就是 QR 分解的 Q。任何一个矩阵 A 都拆成 A = QR,Q 是格拉姆-施密特拉直的这些标准正交列,R 是过程中减去的投影系数组成的上三角矩阵。