Scaling and reflections
我們學到 transformation 可以使用 matrix vector product 來表達
matrix 可以更進一步化為 identity matrix 和 transformation 的結合
T:Rn→Rm∣T(x)=Ax∣A=[T(e1)T(e2)⋯T(en)] 現在來試著 custom 一個自己的 transformation
假設有三個向量在 R2 上繪製出一個三角形
a=[32],b=[−32],c=[3−2] 我們想讓他以 y 軸為主軸,翻轉過來,並且不改變底的情況下,讓高拉長兩倍
所以每個向量的 x 應該要乘以負號,然後 y 應該要乘以 2
T([xy])=[−x2y] 接著我們要怎麼表示 transformation 的 matrix 呢,我們可以拿 identity matrix 當作白紙
寫下每個 e vector 進行 transformation 的結果
I2=[1001]A=[T([10])],[T([01])]A=[−1002] 也就是說
T([xy])=[−x2y]=[−1002][xy]=A[xy] 回到原本三個向量,我們將算好的 transformation apply 到他們三個上面
Aa=[−1002][32]=[−34]Ab=[−1002][−32]=[34]Ac=[−1002][3−2]=[−3−4] 我們成功將他翻面並且拉長了!
我們學到要自製 transformation 可以先定義好 transformation 再 apply 到 identity matrix
或者,我們可以直接針對 identity matrix 在 diagonal 的第一項 (x) 或第二項 (y),
甚至第三項 (三維的 z),第四項 (四維空間) 來做修改。
Rotation in R2
上面我們學到了 reflection 以及 scaling,現在我們來學 rotation
我們要怎麼找到 T 或者是 matrix A ,讓 vector x 往逆時針方向轉 ɵ 度
首先要先確認這個 rotation 運算是否為 linear transformation 才可以繼續下去
Rotθ(x+y)=Rotθ(x)+θ(y)Rotθ(cx)=c⋅Rotθ(x) 影片中有畫圖證明,這兩項都是通過的,所以所有的 rotation 皆為 linear transformation
接著我們來找出 rotation 所表達的 transformation matrix 為何
A=[Rotθ([10]),Rotθ([01])] 先從 [1, 0] 轉換成 [a, b] 開始看起
可以發現 a 為這個正三角形的鄰邊,剛好 cos 等於鄰邊除以斜邊
而 b 等於新 vector 投影到舊 vector 的高,為這個三角形的對邊,剛好 sin 等於對邊除以斜邊
cos(θ)=1a⇒a=cos(θ)sin(θ)=1b⇒b=sin(θ)Rotθ([10])=[cos(θ)sin(θ)] 再來我們看 [0, 1] 轉換成 [c, d]
此時 c 可以為正三角形的對邊, 用 sin 等於對邊除以斜邊得到 c 值,而且因為是在第二象限,所以要加上負值
d 為鄰邊,用 cos 等於鄰邊除以斜邊得到 d 值
sin(θ)=1c⇒c=sin(θ)⇒−sin(θ)cos(θ)=1d⇒d=cos(θ)Rotθ([01])=[−sin(θ)cos(θ)] 於是我們得到了 rotation matrix A 為
A=[cosθsinθ−sinθcosθ] 以後任何向量,想要 rotate ɵ 度時,只要把角度帶入 ɵ 即可
例如我想讓 vector 逆時針旋轉 45 度角:
[cos45∘sin45∘−sin45∘cos45∘][xy]=[2222−2222][xy] Rotation in R3 around the x-axis
接下來我們試著將 rotation 擴充到 R3 空間,但是只以 x-axis 為主軸逆時針旋轉
我們知道要找出 rotation matrix 就是把 rotation apply 到 identity matrix 上
A=3rdRotθ100,3rdRotθ010,3rdRotθ001 可以觀察到,因為是圍著 x-axis 旋轉,所以代表在 x 軸的第一個 vector 是不會變的
3rdRotθ100=100 而第二個代表在 y 軸的 vector 則會除了 x 不變以外,(y, z) 會像 R2 的 (1, 0) 一樣旋轉
3rdRotθ010=0cosθsinθ 第三個代表在 z 軸的 vector ,就是像 R2 的 (0, 1) 一樣旋轉
3rdRotθ001=0−sinθcosθ 所以我們可以得到 matrix A 為
A=1000cosθsinθ0−sinθcosθ Unit Vectors
我們都知道 vector 的 length 怎麼算,像是擴充版的 pythagorean theorem
v=v1v2⋮vn∈Rn,∥v∥=v12+v22+⋯+vn2 而 unit vector 其實就是指 length 等於 1 的 vector
∥u∥=1 今天我們有辦法把一個不為 unit vector 的 vector 變為 unit vector
只要將他的 length 求出,並且讓每一個 element 除以 length 即可
u=∥v∥1⋅v 這時可以驗證得到新的 unit vector u 的 length 等於 1
∥u∥=∥∥v∥1⋅v∥=∥v∥⋅∥v∥1=1 因為 1/length 為 constant 所以可以 apply
∥c⋅v∥=∣c∣⋅∥v∥
而且我們通常會將 unit vector 頭上的 vector sign 轉為 hat sign
if ∥u∥=1then we can write it as u^ 舉個例子
v=12−1,∥v∥=12+22+(−1)2=6 現在求對應 v 的 unit vector u
u^=61⋅12−1=61626−1 Projections Introduction
現在我們要討論的是,任一個 vector 他投影到任一個由 vector 所 span 而成的直線時,他的 影子 的長度為何
我們用這個寫法表示 vector x 投影到 line L 的影子長度 (projection)
ProjL(x) 而從 vector x 垂直射下到 L 的垂直線我們表示為
x−ProjL(x) 也就是上圖淺藍色的直線!
那要怎麼找出 projection 呢?我們發現, projection 其實只是 c 在特定數字時的表現而已
我們只要找出這個 c 就可以找出 projection 的公式
ProjL(x)=cv 而我們發現不管是 cv 還是 v 都會跟淺藍色的直線 (x - cv) 垂直,也就是 Dot product 為 0
v⋅(x−cv)=0v⋅x−cv⋅v=0v⋅x=cv⋅vc=v⋅vv⋅x 所以我們的 projection 公式為
ProjL(x)=cv=v⋅vx⋅vv 這邊來舉個例子,我們有 line L 為 v = (2, 1) span 而成,還有 vector x = (2, 3)
L={c[21]∣c∈R}x=[23] 我們想知道 x 在 L 的投影向量為何,只要帶入剛剛算出來的公式即可
ProjL(x)=[21]⋅[21][23]⋅[21]⋅[21]=57[21]=[14/57/5]=[2.81.4] 其實就是上圖的例子!
Projections as matrix vector product
我們有辦法把 projection 的公式更加簡化嗎?
有的,我們發現分母的 dot product 跟 v 的 length 有關
ProjL(x)=cv=v⋅vx⋅vv=∥v∥2x⋅vv 所以今天若 v 為 unit vector,分母就會變成 1,projection 就會簡化為
ProjL(x)=(x⋅v)v 這就是我們學習過把 vector 變為 unit vector 的好處
接著,我們可以把 projection 變為 matrix 嗎?
我們先檢查 projection 是否為 Linear transformation
ProjL(a+b)=((a+b)⋅u^)u^=(a⋅u^+b⋅u^)u^=(a⋅u^)u^+(b⋅u^)u^=ProjL(a)+ProjL(b) ProjL(ca)=((ca)⋅u^)u^=c(a⋅u^)u^=cProjL(a) 我們可以開始嘗試將 projection 寫成 matrix
我們以 R2 projection 為例,材料有這些,我們用 u1, u2 代表 unit vector
ProjL(x)=(x⋅u^)u^=(A2×2)xProjL:R2→R2u^=[u1u2],I2=[1001] 現在將 projection 的 transformation apply 到 I2 裡面
A=[([10]⋅[u1u2])[u1u2]([01]⋅[u1u2])[u1u2]]=[u1[u1u2]u2[u1u2]]=[u12u1u2u1u2u22] 太棒了,現在只要有任何 projection,就可以套用 A 和 vector 的 product 來解決
舉個例子吧
L={c[21]∣c∈R}⇒v=[21]⇒u^=[5251] 得到 u 我們就可以 apply 到 transformation matrix A 裡面了
A=[54525251] 這樣一來,我們可以求出 R2 平面上,"所有" vector 在 L 的 projection
ProjL(x)=Ax=[54525251]x 我們用上一回 (2, 3) 的例子試看看,It works !
ProjL([23])=[54525251][23]=[2.81.4]