前往
大廳
主題

05. 幾何代數的線性變換與矩陣

Lumi | 2023-05-23 20:36:41 | 巴幣 0 | 人氣 210

幾何代數系列文之五。
本文須使用PC觀看,且讓巴哈姆特能顯示數學式子

本篇介紹幾何代數關於線性變換的一些基本性質,並解釋如何轉換成矩陣。

可對blade做線性變換

熟悉線性代數的讀者一定認得下述線性變換的線性性質,下式中$\alpha,\ \beta \in \mathbb{R}$是純量,$\textbf{a},\ \textbf{b} \in \mathbb{R}^n$是向量,$\mathsf{f}$是$\mathbb{R}^{n} \rightarrow \mathbb{R}^{n}$的線性變換:
$$
\displaylines{
\textsf{f}[\alpha \textbf{a}] = \alpha \textsf{f}[\textbf{a}]\\
\textsf{f}[\textbf{a + b}] = \textsf{f}[\textbf{a}] + \textsf{f}[\textbf{b}]
}
$$
在幾何代數中,線性變換還有outermorphism性質:
$$
\begin{aligned}
\mathsf{f}[\alpha] &=  \alpha\\
\mathsf{f}[\mathbf{a}\wedge\mathbf{b}]&= \mathsf{f}[\mathbf{a}]\wedge \mathsf{f}[\mathbf{b}]
\end{aligned}
$$
即使把向量$\mathbf{a,\ b}$換成blade,上述性質仍然成立。可以觀察到輸入與輸出的blade兩者grade相等,因此不管輸入的是點(純量)、向量、平面、立方體,輸出的結果也是點(純量)、向量、平面、立方體。

舉一個簡單例子示範outermorphism,給定一個單純用來縮放向量的線性變換$\mathsf{f}[\mathbf{a}] = \alpha \mathbf{a}$,若輸入一個2-blade平面$\mathbf{b}_{1} \wedge \mathbf{b}_{2}$:
$$
\begin{aligned}
\mathsf{f}[\mathbf{b}_{1} \wedge \mathbf{b}_{2}] &= \mathsf{f}[\mathbf{b}_{1}] \wedge \mathsf{f}[\mathbf{b}_{2}]\\
&= \alpha \mathbf{b}_{1} \wedge \alpha \mathbf{b}_{2}\\
&= \alpha^{2} \mathbf{b}_{1} \wedge \mathbf{b}_{2}
\end{aligned}
$$
因為每個邊長都變成$\alpha$倍,所以平面的面積變為$\alpha^2$倍。同理,若輸入的是$k$-blade,則結果會變成$\alpha^{k}$倍。

接下來看對$\mathbf{I}_n$做線性變換的情況。$\mathbb{R}^{n}$空間中$k$-grade基底會有$C^n_k$個,所以$n$-grade只有一種基底,因此$\mathbf{I}_n$又被稱作pseudoscalar。又考慮到線性變換不會改變grade,於是變換結果一定是$\mathbf{I}_n$的倍數,此倍數就是線性變換$\mathsf{f}$的行列式值:
$$
\mathsf{f}[\mathbf{I}_{n}] = \det(\mathsf{f})\mathbf{I}_{n} \quad
$$
等號左右同乘$\mathbf{I}_{n}^{-1}$可得到行列式公式:
$$
\det(\mathsf{f}) = \mathsf{f}[\mathbf{I}_{n}]\mathbf{I}_{n}^{-1}
$$

可對multivector做線性變換

Multivector是不同grade的vector的線性組合,顯然因為線性性質,對multivector做線性變換等同於對其中每個元素做線性變換。

第二篇所介紹的rotor是multivector,我們來看旋轉一個rotor會發生什麼事情。假設有兩個rotor $R_1$與$R_2$,用$R_2$來旋轉$R_1$可寫成$R_2R_1\widetilde{R_2}$,其中$R_{1}$由單位平面$\mathbf{I}$與旋轉角$\theta$組成,於是$R_{1}=\cos\dfrac{\theta}{2} - \sin \dfrac{\theta}{2}\mathbf{I}$。
$$
\begin{aligned}
R_{2}R_{1}\widetilde{R_{2}} &=  R_{2}(\cos\dfrac{\theta}{2} - \sin \dfrac{\theta}{2}\mathbf{I})\widetilde{R_{2}}\\
&= R_{2}\cos\dfrac{\theta}{2}\widetilde{R_{2}} - R_{2}(\sin \dfrac{\theta}{2}\mathbf{I})\widetilde{R_{2}}\\
&= \cos\dfrac{\theta}{2}\cancel{R_{2}\widetilde{R_{2}}} - \sin \dfrac{\theta}{2}R_{2}\mathbf{I}\widetilde{R_{2}}\\
&= \cos\dfrac{\theta}{2} - \sin \dfrac{\theta}{2}R_{2}\mathbf{I}\widetilde{R_{2}}
\end{aligned}
$$
Rotor經過旋轉變換後還是rotor,角度資訊不變,但$R_1$的旋轉平面會被$R_2$旋轉。


以矩陣表達幾何代數的線性變換

由於GPU的設計傾向於加速矩陣運算,因此在實作時仍有將幾何代數轉換為矩陣的需要。或許有些人看過四元數轉矩陣需要一些數學技巧,因而覺得幾何代數轉矩陣也會很麻煩,但轉換原理其實相當簡單,利用線性性質即可。

給一個向量$\mathbf{a}= \displaystyle\sum^n_{i=1} a_i\mathbf{e}_i$,其中$a_i$是基底的純量係數。設一個線性變換$\mathsf{f}$,對向量$\mathbf{a}$變換會得到:
$$
\begin{aligned}
\mathsf{f}[\mathbf{a}]&= \mathsf{f}\left[\displaystyle\sum^n_{i=1}a_{i}\mathbf{e}_{i}\right]\\
&= \displaystyle\sum^{n}_{i=1} \mathsf{f}[a_{i}\mathbf{e}_{i}]\\
&= \displaystyle\sum^n_{i=1} a_{i}\mathsf{f}[\mathbf{e}_i]\\
&= \begin{bmatrix}\mathsf{f}[\mathbf{e}_{1}]\dots \mathsf{f}[\mathbf{e}_{n}]\end{bmatrix} \begin{bmatrix}a_{1}\\ \vdots \\ a_n\end{bmatrix}
\end{aligned}
$$
可觀察到矩陣$\mathsf{f}$的第$i$行是向量$\mathsf{f}[\mathbf{e}_i]$,意即把$\mathbf{e}_1$到$\mathbf{e}_n$代入$\mathsf{f}$就能得到整個矩陣。我們用正規化的四元數來示範轉換成矩陣,設$\mathbf{q}=w+xi+yj+zk$,將之寫成幾何代數形式$\mathbf{q}=w-x\mathbf{e}_{23}-y\mathbf{e}_{31}-z\mathbf{e}_{12}$,於是矩陣第一行可這樣算:
$$
\begin{aligned}
\mathsf{f}[\mathbf{e}_{1}]&= \mathbf{q} \mathbf{e}_{1}\widetilde{\mathbf{q}}\\
&= (w-x\mathbf{e}_{23}-y\mathbf{e}_{31}-z\mathbf{e}_{12})\mathbf{e}_{1}(w+x\mathbf{e}_{23}+y\mathbf{e}_{31}+z\mathbf{e}_{12})\\
&= (w \mathbf{e}_{1} -x \mathbf{e}_{123}-y \mathbf{e}_{3}+z \mathbf{e}_2)(w+x\mathbf{e}_{23}+y\mathbf{e}_{31}+z\mathbf{e}_{12})\\
&= w^{2}\mathbf{e}_{1}-\cancel{xw\mathbf{e}_{123}}-yw \mathbf{e}_{3}+zw \mathbf{e}_{2} \\
&+ \cancel{xw \mathbf{e}_{123}} + x^{2}\mathbf{e}_{1} +xy \mathbf{e}_{2} +xz \mathbf{e}_3\\
&- yw \mathbf{e}_{3}+xy \mathbf{e}_{2} - y^{2}\mathbf{e}_{1}+\cancel{yz \mathbf{e}_{123}}\\
&+ zw \mathbf{e}_{2}+xz \mathbf{e}_{3}-\cancel{yz \mathbf{e}_{123}}-z^{2}\mathbf{e}_{1}\\
&= (w^{2}+x^{2}-y^{2}-z^{2})\mathbf{e}_{1} + (2xy+2zw)\mathbf{e}_{2}+(2xz-2yw)\mathbf{e}_{3}
\end{aligned}
$$
利用$w^2+x^2+y^2+z^2=1$的性質可以用來簡化第一個係數,用$w^2+x^2=1-y^2-z^2$代入上面結果,可得到:
$$
\mathsf{f}[\mathbf{e}_{1}] = (1-2y^2-2z^2)\mathbf{e}_1 + (2xy+2zw)\mathbf{e}_2 + (2xz-2yw)\mathbf{e}_3
$$
矩陣第二行也如法泡製:
$$
\begin{aligned}
\mathsf{f}[\mathbf{e}_{2}]&= \mathbf{q} \mathbf{e}_{2}\widetilde{\mathbf{q}}\\
&= (w-x\mathbf{e}_{23}-y\mathbf{e}_{31}-z\mathbf{e}_{12})\mathbf{e}_{2}(w+x\mathbf{e}_{23}+y\mathbf{e}_{31}+z\mathbf{e}_{12})\\
&= (w \mathbf{e}_{2}+x \mathbf{e}_{3}-y \mathbf{e}_{123}-z \mathbf{e}_{1})(w+x\mathbf{e}_{23}+y\mathbf{e}_{31}+z\mathbf{e}_{12})\\
&= w^{2}\mathbf{e}_{2}+ xw \mathbf{e}_{3}- \cancel{yw \mathbf{e}_{123}}-zw \mathbf{e}_{1}\\
&+ xw \mathbf{e}_{3}- x^{2}\mathbf{e}_{2}+xy \mathbf{e}_{1}-\cancel{xz \mathbf{e}_{123}}\\
&+ \cancel{yw \mathbf{e}_{123}} +xy \mathbf{e}_{1}+y^{2}\mathbf{e}_{2}+yz \mathbf{e}_{3}\\
&-zw \mathbf{e}_{1}+\cancel{xz \mathbf{e}_{123}}+yz\mathbf{e}_{3}- z^{2}\mathbf{e}_{2}\\
&= (2xy-2zw)\mathbf{e}_{1} + (w^2-x^2+y^2-z^2)\mathbf{e}_{2} + (2yz+2xw)\mathbf{e}_{3}\\
&= (2xy-2zw)\mathbf{e}_{1} + (1-2x^2-2z^2)\mathbf{e}_{2} + (2yz+2xw)\mathbf{e}_{3}
\end{aligned}
$$
矩陣第三行:
$$
\begin{aligned}
\mathsf{f}[\mathbf{e}_{3}]&= \mathbf{q} \mathbf{e}_{3}\widetilde{\mathbf{q}}\\
&= (w-x\mathbf{e}_{23}-y\mathbf{e}_{31}-z\mathbf{e}_{12})\mathbf{e}_{3}(w+x\mathbf{e}_{23}+y\mathbf{e}_{31}+z\mathbf{e}_{12})\\
&= (w \mathbf{e}_{3}-x \mathbf{e}_{2}+y \mathbf{e}_{1} -z \mathbf{e}_{123})(w+x\mathbf{e}_{23}+y\mathbf{e}_{31}+z\mathbf{e}_{12})\\
&= w^{2}\mathbf{e}_{3}-xw \mathbf{e}_{2}+yw \mathbf{e}_{1}-\cancel{zw \mathbf{e}_{123}}\\
&- xw \mathbf{e}_{2} - x^{2}\mathbf{e}_{3}+\cancel{xy \mathbf{e}_{123}}+xz \mathbf{e}_{1}\\
&+ yw \mathbf{e}_{1} -\cancel{xy \mathbf{e}_{123}} - y^{2}\mathbf{e}_{3} +yz \mathbf{e}_{2}\\
&+ \cancel{zw \mathbf{e}_{123}}+xz \mathbf{e}_{1}+yz \mathbf{e}_{2}+z^{2}\mathbf{e}_{3}\\
&= (2xz+2yw)\mathbf{e}_{1}+(2yz-2xw)\mathbf{e}_{2}+(w^{2}-x^{2}-y^{2}+z^{2})\mathbf{e}_{3}\\
&= (2xz+2yw)\mathbf{e}_{1}+(2yz-2xw)\mathbf{e}_{2}+(1-2x^{2}-2y^{2})\mathbf{e}_{3}
\end{aligned}
$$最後組裝起來:
$$
\begin{bmatrix}1-2y^{2}-2z^{2} & 2xy-2zw & 2xz+2yw\\ 2xy+2zw & 1-2x^{2}-2z^{2} & 2yz-2xw \\ 2xz-2yw & 2yz+2xw & 1-2x^{2}-2y^{2}\end{bmatrix}
$$
實際運用幾何代數處理問題時不要無腦全轉成矩陣,應先做效能測試,才能確定使用矩陣是否比較快。

創作回應

相關創作

更多創作