2019年2月10日 星期日

[線性代數]以SVD處理兩直線交點

自從學了線性代數以後,不光是多益成績大幅進步,食慾大增...每天我都能多吃兩碗飯,開了10年的老車油門也突然變得輕巧,更棒的是,兒子長到了180公分,腦袋也靈光許多,總之...線性代數改變了我的人生
摘自-攻殺小




這次是應用SVD處理國中經典問題:已知兩直線求交點,同樣地,不從直覺式幾何思考線路切入,使用線性代數的觀念來分析線性方程組的特徵,首先列出兩直線方程式(以general form表達):

line1:a1x+b1y+c1=0line1:a1x+b1y+c1=0
line1:a2x+b2y+c2=0line1:a2x+b2y+c2=0

化成矩陣Ax=0Ax=0型態:

[00]=[a1b1c1a2b2c2][xy1]=Ax

老套路,跟先前的以SVD處理已知兩點求直線系數 一樣手法,我們想找出A的零空間構成正交基,即是此問題的解(也可能沒有唯一解喔,嘿嘿),總之先來看看SVD分解吧:

A=UDVT=[u1u2]2×2[s1000s20]2×3[v1v2v3]3×3

我們觀察此問題的D,顯然地只有2×3,最多只有兩個不為零的對角係數,而v3沒有放大係數可對應,顯然鐵定投射到零空間,會是解之一,再整理上式重新呈現會清楚許多:

A=[u1u2][s1v1s2v2]

最後,將v3化為齊次座標(homogeneous coordinates)形式,也就是最後一個元素為1,才能符合問題所需的解形式

v3=[v31v32v33][xy1]=[v31v33v32v331]


喔!光看上面程序會發現有個可能BUG:若v33=0不就出了問題了?除以0?X,Y為無窮大?

我們反過來推理,v33何時會等於0?v3向量作為零空間正交基,必定要與(a1,b1,c1),(a2,b2,c2) 二向量正交,也就是與此二向量內積為0,如果a1=a2,b1=b2,c1c2,可能的解中,也只能讓v33=0了,否則方程式是不可能協調

那麼a1=a2,b1=b2,c1c2又何時會發生?答案就是平行線,兩條不一樣的直線斜率相同a1=a2,b1=b2,但截距不同c1c2,在無窮遠處相交

這樣一切都說得通了👀

整理一下,實作兩直線求交點程序:
  1. 兩直線以General form表達
  2. 將兩直線係數整理,裝在矩陣A
  3. SVD分解A
  4. VT的第三個向量v3即為解向量
  5. 解向量不等於交點座標,接著判定解向量第三個元素是否為0?若是,此題無解,表示是兩條平行線;若否,有解,需將解向量縮放到第三個元素為1,即為交點的齊次座標形式

最後感嘆一聲,偉哉,線代

沒有留言:

張貼留言