在线性代数中,格拉姆-斯密特过程应该是个比较基础的东西,一直都只是有个模糊的印象,不知道具体的操作,其实我以为这是个高大上的算法,没想到这个算法是这么地亲民。
格拉姆-斯密特过程是实现正交化的一个方法:给定矩阵
1 二维情形
假设我们有两个线性无关的向量
- 我们想要他们垂直,其中
a⇒v1 ,b⇒v2
- 假设
a 已经调整好了,我们将它的方向作为q1 的方向 b 还没有进行调整: 我们希望它垂直于q1
下面的问题就是我们如何从
- 我们把
b 在v1 进行投影, 然后我们可以得到P⋅v1=vT1bvT1v1⋅v1 e 是我们的投影误差, 有e=b−Pv1=b−Pv1=b−vT1bvT1v1⋅v1 - 注意
v2=e 有相同的长度和方向。 - 所以
v2=b−vT1bvT1v1⋅v1 - 说明: 我们从原始向量
b 中移除(减去)平行部分分量v1 , 然后剩下的就是垂直部分的分量。 - 现在
v1⊥v2 - 我们可以简单检查一下:
vT1v2=vT1(b−vT1bvT1v1⋅v1)=vT1b−vT1⋅vT1bvT1v1⋅v1=vT1b−vT1b=0
为了得到最终的结果,我们只需要对
q1=v1/∥v1∥ q2=v2/∥v2∥
2 三维情形
假设我们有三个向量
- 我们需要找到三个两两互相垂直的向量
v1,v2,v3 ,然后对它们进行单位化 - 由二维情形的讨论,我们可以首先令
v1=a ,v2=b−vT1bvT1v1v1 - 下面我们需要找到
v3 ,满足v3⊥v1 和v3⊥v2 - 对于
v3 , 我们想要减去它沿着v1 和v2 方向的分量 - 因此,我们有
v3=c−vT1cvT1v1⋅v1−vT2cvT2v2⋅v2
得到
q1=v1/∥v1∥ q2=v2/∥v2∥ q3=v3/∥v3∥
由下面这个gif图,我们可以动态地看到变化的过程,更加直接