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