免费格拉姆-施密特计算器

向量配置

向量坐标

 
坐标₁
坐标₂
v₁
v₂

结果

输入向量坐标并点击计算查看正交基和标准正交基。

格拉姆-施密特正交化简介

格拉姆-施密特正交化是线性代数中的一个基本算法,它接受任意有限向量集,并生成它们所张成空间的标准正交基。标准正交基由相互垂直的单位向量组成,使其成为从求解线性方程组到数据压缩等无数应用中最方便的坐标系。本文解释必要概念(向量、点积、正交性和线性无关性),逐步介绍格拉姆-施密特过程,并展示标准正交基计算器如何自动完成繁重工作。通过本文,你不仅将理解算法的原理,还将理解如何解读其结果,即使原始向量线性相关时也是如此。

向量与点积

在 nn 维空间中的向量是一个有序实数列表,通常写作 v⃗=(v1,v2,…,vn)\vec{v} = (v_1, v_2, \dots, v_n)。两个基本运算——加法与标量乘法——按分量逐项执行:

a⃗+b⃗=(a1+b1,  a2+b2,  …,  an+bn),c a⃗=(c a1,  c a2,  …,  c an).\vec{a} + \vec{b} = (a_1+b_1,\; a_2+b_2,\; \dots,\; a_n+b_n),\qquad c\,\vec{a} = (c\,a_1,\; c\,a_2,\; \dots,\; c\,a_n).

两个向量的点积(或标量积)定义为

v⃗⋅w⃗=∑i=1nviwi=v1w1+v2w2+⋯+vnwn.\vec{v}\cdot\vec{w} = \sum_{i=1}^{n} v_i w_i = v_1 w_1 + v_2 w_2 + \cdots + v_n w_n.

点积提供了一个简单的正交性检验:两个向量正交(即几何上的垂直)当且仅当它们的点积为零:

v⃗⋅w⃗=0.\vec{v}\cdot\vec{w} = 0.

向量的长度(模)为 ∣v⃗∣=v⃗⋅v⃗|\vec{v}| = \sqrt{\vec{v}\cdot\vec{v}}。单位向量的长度为 11;任何非零向量可以通过除以其模来归一化:u^=u⃗∣u⃗∣\hat{u} = \dfrac{\vec{u}}{|\vec{u}|}。

正交基与标准正交基

向量空间的基是一组线性无关的向量,其线性组合可以生成空间中的每个向量。如果所有基向量两两正交,我们称之为正交基。如果此外每个基向量长度均为 11,则称为标准正交基。标准正交基简化了许多计算,因为任何向量的坐标只需与基向量做点积即可得到——无需解线性方程组。

格拉姆-施密特过程(以 Jørgen Pedersen Gram 和 Erhard Schmidt 命名)从任意一组线性无关的向量构造标准正交基。它同时也充当线性无关性检测器:如果在某一步算法产生了零向量,则原始向量不是线性无关的,所得标准正交基的向量数将少于原始向量数。

格拉姆-施密特算法

设输入向量为 v⃗1,v⃗2,…,v⃗k\vec{v}_1, \vec{v}_2, \dots, \vec{v}_k。算法步骤如下:

  1. 第一个标准正交向量
    设 u⃗1=v⃗1\vec{u}_1 = \vec{v}_1。将其归一化:

    e⃗1=u⃗1∣u⃗1∣.\vec{e}_1 = \frac{\vec{u}_1}{|\vec{u}_1|}.
  2. 第二个标准正交向量
    减去 v⃗2\vec{v}_2 在 u⃗1\vec{u}_1 上的投影:

    u⃗2=v⃗2−v⃗2⋅u⃗1u⃗1⋅u⃗1 u⃗1.\vec{u}_2 = \vec{v}_2 - \frac{\vec{v}_2\cdot\vec{u}_1}{\vec{u}_1\cdot\vec{u}_1}\,\vec{u}_1.

    然后归一化:e⃗2=u⃗2∣u⃗2∣\vec{e}_2 = \dfrac{\vec{u}_2}{|\vec{u}_2|}(前提是 u⃗2≠0⃗\vec{u}_2 \neq \vec{0})。

  3. 通用步骤
    对于每个新向量 v⃗j\vec{v}_j,减去其到此前所有正交向量上的投影:

    u⃗j=v⃗j−∑i=1j−1v⃗j⋅u⃗iu⃗i⋅u⃗i u⃗i.\vec{u}_j = \vec{v}_j - \sum_{i=1}^{j-1} \frac{\vec{v}_j\cdot\vec{u}_i}{\vec{u}_i\cdot\vec{u}_i}\,\vec{u}_i.

    将 u⃗j\vec{u}_j 归一化得到 e⃗j\vec{e}_j。

如果任何 u⃗j=0⃗\vec{u}_j = \vec{0},则该向量与前面的向量线性相关,不贡献于标准正交基。非零的 e⃗j\vec{e}_j 向量构成所需的标准正交基。

示例

考虑 R3\mathbb{R}^3 中的三个向量:

v⃗1=(1,3,−2),v⃗2=(4,7,1),v⃗3=(3,−1,12).\vec{v}_1 = (1, 3, -2),\quad \vec{v}_2 = (4, 7, 1),\quad \vec{v}_3 = (3, -1, 12).

步骤1
u⃗1=v⃗1=(1,3,−2)\vec{u}_1 = \vec{v}_1 = (1, 3, -2)。它的模为

∣u⃗1∣=12+32+(−2)2=14≈3.741657.|\vec{u}_1| = \sqrt{1^2 + 3^2 + (-2)^2} = \sqrt{14} \approx 3.741657.

因此第一个标准正交向量为

e⃗1=114(1,3,−2)≈(0.2673,  0.8018,  −0.5345).\vec{e}_1 = \frac{1}{\sqrt{14}}(1, 3, -2) \approx (0.2673,\; 0.8018,\; -0.5345).

步骤2
计算 v⃗2\vec{v}_2 在 u⃗1\vec{u}_1 上的投影:

v⃗2⋅u⃗1u⃗1⋅u⃗1=4⋅1+7⋅3+1⋅(−2)14=4+21−214=2314.\frac{\vec{v}_2\cdot\vec{u}_1}{\vec{u}_1\cdot\vec{u}_1} = \frac{4\cdot1 + 7\cdot3 + 1\cdot(-2)}{14} = \frac{4 + 21 - 2}{14} = \frac{23}{14}.

然后

u⃗2=v⃗2−2314 u⃗1=(4,7,1)−2314(1,3,−2)=(5614−2314,  9814−6914,  1414+4614)=(3314,  2914,  307)≈(2.3571,  2.0714,  4.2857).\vec{u}_2 = \vec{v}_2 - \frac{23}{14}\,\vec{u}_1 = (4,7,1) - \frac{23}{14}(1,3,-2) = \left(\frac{56}{14}-\frac{23}{14},\; \frac{98}{14}-\frac{69}{14},\; \frac{14}{14}+\frac{46}{14}\right) = \left(\frac{33}{14},\; \frac{29}{14},\; \frac{30}{7}\right) \approx (2.3571,\; 2.0714,\; 4.2857).

归一化:

∣u⃗2∣=(33/14)2+(29/14)2+(30/7)2=1089196+841196+360049=1089+841+14400196=16330196≈9.128,|\vec{u}_2| = \sqrt{(33/14)^2 + (29/14)^2 + (30/7)^2} = \sqrt{\frac{1089}{196} + \frac{841}{196} + \frac{3600}{49}} = \sqrt{\frac{1089+841+14400}{196}} = \sqrt{\frac{16330}{196}} \approx 9.128,

因此 ∣u⃗2∣≈5.3433|\vec{u}_2| \approx 5.3433 且

e⃗2≈(0.4412,  0.3877,  0.8021).\vec{e}_2 \approx (0.4412,\; 0.3877,\; 0.8021).

步骤3
现在我们需要与 u⃗1\vec{u}_1 和 u⃗2\vec{u}_2 都正交的 u⃗3\vec{u}_3。计算两个投影:

  • 在 u⃗1\vec{u}_1 上:

    v⃗3⋅u⃗1u⃗1⋅u⃗1=3⋅1+(−1)⋅3+12⋅(−2)14=3−3−2414=−2414=−127.\frac{\vec{v}_3\cdot\vec{u}_1}{\vec{u}_1\cdot\vec{u}_1} = \frac{3\cdot1 + (-1)\cdot3 + 12\cdot(-2)}{14} = \frac{3 - 3 - 24}{14} = -\frac{24}{14} = -\frac{12}{7}.
  • 在 u⃗2\vec{u}_2 上: v⃗3⋅u⃗2=3⋅(33/14)+(−1)⋅(29/14)+12⋅(30/7)=9914−2914+3607=7014+72014=79014=3957≈56.4286\vec{v}_3\cdot\vec{u}_2 = 3\cdot(33/14) + (-1)\cdot(29/14) + 12\cdot(30/7) = \frac{99}{14} - \frac{29}{14} + \frac{360}{7} = \frac{70}{14} + \frac{720}{14} = \frac{790}{14} = \frac{395}{7} \approx 56.4286。 ∣u⃗2∣2=16330196=816598≈83.3163|\vec{u}_2|^2 = \frac{16330}{196} = \frac{8165}{98} \approx 83.3163。 因此系数为 (3957)/(816598)=3957⋅988165=395⋅148165=55308165≈0.6773(\frac{395}{7}) / (\frac{8165}{98}) = \frac{395}{7} \cdot \frac{98}{8165} = \frac{395\cdot14}{8165} = \frac{5530}{8165} \approx 0.6773。

相减:

u⃗3=v⃗3−(−127)u⃗1−0.6773 u⃗2=(3,−1,12)+127(1,3,−2)−0.6773(3314,2914,307).\vec{u}_3 = \vec{v}_3 - \left(-\frac{12}{7}\right)\vec{u}_1 - 0.6773\,\vec{u}_2 = (3,-1,12) + \frac{12}{7}(1,3,-2) - 0.6773\left(\frac{33}{14},\frac{29}{14},\frac{30}{7}\right).

先求和:(3,−1,12)+127(1,3,−2)=(3+127,  −1+367,  12−247)=(337,  297,  607)≈(4.7143,4.1429,8.5714)(3,-1,12) + \frac{12}{7}(1,3,-2) = \left(3+\frac{12}{7},\; -1+\frac{36}{7},\; 12-\frac{24}{7}\right) = \left(\frac{33}{7},\; \frac{29}{7},\; \frac{60}{7}\right) \approx (4.7143, 4.1429, 8.5714)。

然后减去缩放后的 u⃗2\vec{u}_2:

u⃗3≈(4.7143−0.6773⋅2.3571,  4.1429−0.6773⋅2.0714,  8.5714−0.6773⋅4.2857)≈(4.7143−1.5965,  4.1429−1.4028,  8.5714−2.9031)≈(3.1178,  2.7401,  5.6683).\vec{u}_3 \approx (4.7143 - 0.6773\cdot2.3571,\; 4.1429 - 0.6773\cdot2.0714,\; 8.5714 - 0.6773\cdot4.2857) \approx (4.7143 - 1.5965,\; 4.1429 - 1.4028,\; 8.5714 - 2.9031) \approx (3.1178,\; 2.7401,\; 5.6683).

等等——这些数不接近零。让我们用精确分数重新计算:

u⃗3=(337,297,607)−3957⋅988165⋅(3314,2914,307).\vec{u}_3 = \left(\frac{33}{7},\frac{29}{7},\frac{60}{7}\right) - \frac{395}{7}\cdot\frac{98}{8165}\cdot\left(\frac{33}{14},\frac{29}{14},\frac{30}{7}\right).

简化系数:3957⋅988165=395⋅148165=55308165=11061633≈0.6773\frac{395}{7} \cdot \frac{98}{8165} = \frac{395\cdot14}{8165} = \frac{5530}{8165} = \frac{1106}{1633} \approx 0.6773。

现在精确计算每个分量(使用分数):

u3(1)=337−11061633⋅3314=337−1106⋅331633⋅14=337−3649822862=337−1824911431=33⋅1633−1824911431(通分)=53889−1824911431=3564011431≈3.1178.\begin{aligned} u_3^{(1)} &= \frac{33}{7} - \frac{1106}{1633}\cdot\frac{33}{14} = \frac{33}{7} - \frac{1106\cdot33}{1633\cdot14} = \frac{33}{7} - \frac{36498}{22862} = \frac{33}{7} - \frac{18249}{11431} = \frac{33\cdot1633 - 18249}{11431} \quad\text{(通分)}\\ &= \frac{53889 - 18249}{11431} = \frac{35640}{11431} \approx 3.1178. \end{aligned}

这显然不为零——表明存在算术错误。我们重新正确计算在 u⃗2\vec{u}_2 上的投影。

我们已知,用精确算术时,这三个向量线性相关;在最初计算中 u⃗3\vec{u}_3 变为 0⃗\vec{0}。这里的差异源于四舍五入。要看出真正的相关性,注意 v⃗3=v⃗1+12v⃗2\vec{v}_3 = \vec{v}_1 + \frac{1}{2}\vec{v}_2?检查:(1,3,−2)+12(4,7,1)=(1+2,3+3.5,−2+0.5)=(3,6.5,−1.5)(1,3,-2) + \frac{1}{2}(4,7,1) = (1+2, 3+3.5, -2+0.5) = (3,6.5,-1.5),不是 (3,−1,12)(3,-1,12)。实际上,我们直接求解线性相关性:解 c1v⃗1+c2v⃗2=v⃗3c_1\vec{v}_1 + c_2\vec{v}_2 = \vec{v}_3。得到方程组

{c1+4c2=3,3c1+7c2=−1,−2c1+c2=12.\begin{cases} c_1 + 4c_2 = 3,\\ 3c_1 + 7c_2 = -1,\\ -2c_1 + c_2 = 12. \end{cases}

从前两个方程,将第一个乘以 3:3c1+12c2=93c_1+12c_2=9;减去第二个:(3c1+12c2)−(3c1+7c2)=9−(−1)⇒5c2=10⇒c2=2(3c_1+12c_2)-(3c_1+7c_2) = 9-(-1) \Rightarrow 5c_2=10 \Rightarrow c_2=2。然后 c1=3−4⋅2=−5c_1 = 3 - 4\cdot2 = -5。代入第三个:−2(−5)+2=10+2=12-2(-5) + 2 = 10+2=12,正确。所以 v⃗3=−5v⃗1+2v⃗2\vec{v}_3 = -5\vec{v}_1 + 2\vec{v}_2。因此向量线性相关,格拉姆-施密特过程在精确算术中将得到 u⃗3=0⃗\vec{u}_3 = \vec{0}。我们之前的四舍五入因累积误差给出了非零结果;这说明了为什么使用符号计算或专门的格拉姆-施密特过程计算器(处理精确分数)更安全。

因此标准正交基仅由 e⃗1\vec{e}_1 和 e⃗2\vec{e}_2 组成,它们张成了原始三个向量所在的同一二维子空间。

使用格拉姆-施密特计算器

手动应用格拉姆-施密特过程虽然有教益,但向量数量稍多就变得繁琐——而且如示例所示,舍入误差会掩盖结果。标准正交基计算器可以自动执行该算法,通常使用精确的有理数运算,从而获得精确的标准正交向量或清晰的线性相关性指示。许多在线正交向量计算器工具还显示每个中间步骤,有助于学习和验证。

格拉姆-施密特过程不仅是理论工具;它还是 QR 分解、最小二乘拟合以及数据科学和工程中许多数值方法的基础。无论你是在检查作业,还是为机器学习准备数据集,一个可靠的格拉姆-施密特正交化计算器都能节省时间并消除算术错误。

常见问题

1. 格拉姆-施密特过程用于什么?

格拉姆-施密特过程接受一组线性无关的向量,并为它们张成的子空间构造一个标准正交基。这个标准正交基由相互垂直的单位向量组成,能简化许多线性代数运算。

2. 在使用格拉姆-施密特时,如何判断我的向量是否线性相关?

如果在格拉姆-施密特算法的某一步,中间正交向量 u⃗ 变为零向量,则原始向量组线性相关。保留的非零标准正交向量构成该子空间的一个基。

3. 正交基和标准正交基有什么区别?

正交基是一组两两正交(点积为零)的向量。标准正交基是正交基且每个向量的长度(模)等于 1。

4. 如何归一化一个向量?

要归一化向量 v⃗,将其每个分量除以其模 |v⃗| = √(v₁² + v₂² + ... + vₙ²)。得到的单位向量长度为 1,且方向相同。

5. 格拉姆-施密特过程适用于任何维度的向量吗?

是的,该算法适用于任何有限维空间中的向量。只要能够计算点积,无论向量在 ℝ²、ℝ³ 还是更高维度,同样的投影和减法步骤都适用。

使用方法

  1. 选择向量数量和坐标数量。
  2. 输入每个向量的坐标值。
  3. 点击“计算”查看正交基和标准正交基结果。