格拉姆-斯密特過程

  在線性代數中,格拉姆-斯密特過程應該是個比較基礎的東西,一直都只是有個模糊的印象,不知道具體的操作,其實我以爲這是個高大上的算法,沒想到這個算法是這麼地親民。
  格拉姆-斯密特過程是實現正交化的一個方法:給定矩陣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

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