格拉姆-斯密特过程

    xiaoxiao2022-06-30  82

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

    1 二维情形

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

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

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

      

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

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

    q1=v1/v1 q2=v2/v2

    2 三维情形

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

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

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

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

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

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

    转载请注明原文地址: https://ju.6miu.com/read-1125911.html

    最新回复(0)