格拉姆-斯密特过程

  在线性代数中,格拉姆-斯密特过程应该是个比较基础的东西,一直都只是有个模糊的印象,不知道具体的操作,其实我以为这是个高大上的算法,没想到这个算法是这么地亲民。
  格拉姆-斯密特过程是实现正交化的一个方法:给定矩阵A ,若A 中各列向量线性无关,则A 可以产生一个正交矩阵Q ,可以简单地将Q 理解为各列向量之间互相垂直的矩阵。下面在二维平面上对这个过程进行具体的描述。

1 二维情形

假设我们有两个线性无关的向量 ab

  • 我们想要他们垂直,其中 av1 , bv2
    这里写图片描述
  • 假设 a 已经调整好了,我们将它的方向作为 q1 的方向
  • b 还没有进行调整: 我们希望它垂直于 q1

下面的问题就是我们如何从 b 产生一个向量 v2 以满足 v2v1=a

   这里写图片描述

  • 我们把 bv1 进行投影, 然后我们可以得到 Pv1=vT1bvT1v1v1
  • e 是我们的投影误差, 有 e=bPv1=bPv1=bvT1bvT1v1v1
  • 注意 v2=e 有相同的长度和方向。
  • 所以 v2=bvT1bvT1v1v1
  • 说明: 我们从原始向量 b 中移除(减去)平行部分分量 v1 , 然后剩下的就是垂直部分的分量。
  • 现在 v1v2
  • 我们可以简单检查一下:vT1v2=vT1(bvT1bvT1v1v1)=vT1bvT1vT1bvT1v1v1=vT1bvT1b=0

为了得到最终的结果,我们只需要对v1v2 进行单位化即可:

  • q1=v1/v1
  • q2=v2/v2

2 三维情形

假设我们有三个向量a,b,c

  • 我们需要找到三个两两互相垂直的向量v1,v2,v3 ,然后对它们进行单位化
  • 由二维情形的讨论,我们可以首先令v1=av2=bvT1bvT1v1v1
  • 下面我们需要找到v3 ,满足v3v1v3v2
  • 对于v3 , 我们想要减去它沿着 v1v2 方向的分量
  • 因此,我们有v3=cvT1cvT1v1v1vT2cvT2v2v2

得到q1,q2,q3 之后,我们对其进行单位化(归一化):

  • q1=v1/v1
  • q2=v2/v2
  • q3=v3/v3

由下面这个gif图,我们可以动态地看到变化的过程,更加直接
这里写图片描述

参考:http://0agr.ru/wiki/index.php/Gram-Schmidt_Process

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章