四元数の4x4実行列表現を作る

実は２匹いる

 # はじめに
　 Wikipedia等にも結果は載っているのだが、言語によって形式がマチマチだったりする。
 この記事では、四元数へ左からもしくは右から単位元を掛ける操作を4次元実ベクトルへの線形変換と対応付けることで、2種類独立な行列表現が存在することを見ていきたい。

 # 左から掛ける
 　四元数 $q = a + bi + cj + dk \in \mathbb H$（$a, b, c, d \in \mathbb R$, $i^2 = j^2 = k^2 = ijk = -1$）への演算を、縦ベクトル
```math
\begin{pmatrix}
a \\ b \\ c \\ d
\end{pmatrix}
```
への線形変換として書いてみる。すべての演算でそのように書ける保証はないが、左右からの乗算であればできそうだ。なお4つの実数の順序は人間が勝手に決めたことになるが、最終的な結果に大きな影響はなさそうだ。
　左から単位元を掛けていく：
```math
\begin{align}
& i(a + bi + cj + dk) = -b + ai -dj + ck \\
& \mapsto 
I_L\begin{pmatrix}
a \\ b \\ c \\ d
\end{pmatrix}
=
\begin{pmatrix}
-b \\ a \\ -d \\ c
\end{pmatrix}, \ 
I_L :=
\begin{pmatrix}
0 &-1 & 0 & 0 \\
1 & 0 & 0 & 0 \\
0 & 0 & 0 & -1 \\
0 & 0 & 1 & 0 
\end{pmatrix} \\ % s0 x s2

& j(a + bi + cj + dk) = -c + di + aj - bk \\
& \quad\mapsto 
J_L\begin{pmatrix}
a \\ b \\ c \\ d
\end{pmatrix}
=
\begin{pmatrix}
-c \\ d \\ a \\ ーb
\end{pmatrix}, \ 
J_L :=
\begin{pmatrix}
0 & 0 &-1 & 0 \\
0 & 0 & 0 & 1 \\
1 & 0 & 0 & 0 \\
0 &-1 & 0 & 0 
\end{pmatrix} \\ % s2 x s3

& k(a + bi + cj + dk) = -d - ci + bj + ak \\
& \quad\mapsto 
K_L\begin{pmatrix}
a \\ b \\ c \\ d
\end{pmatrix}
=
\begin{pmatrix}
-d \\ -c \\b \\ a
\end{pmatrix}, \ 
K_L:=
\begin{pmatrix}
0 & 0 & 0 &-1 \\
0 & 0 &-1 & 0 \\
0 & 1 & 0 & 0 \\
1 & 0 & 0 & 0 
\end{pmatrix} \\ % s2 x s1

\end{align}
```
検算すると、単位行列を$E$として
```math
{I_L}^2 = {J_L}^2 = {K_L}^2 = I_L J_L K_L = -E
```
と四元数の行列表現となっていることがわかる。

 # 右から掛ける
　単位元$i, j, k$を掛けて線形変換とする操作は、左からには限られない。右から掛けてみることで先程とは独立の線形変換が作れそうである。実際にやってみると：
```math
\begin{align}
& (a + bi + cj + dk)i = -b + ai + dj - ck \\
& \mapsto 
I_R'\begin{pmatrix}
a \\ b \\ c \\ d
\end{pmatrix}
=
\begin{pmatrix}
-b \\ a \\ d \\ -c
\end{pmatrix}, \ 
I_R' :=
\begin{pmatrix}
0 &-1 & 0 & 0 \\
1 & 0 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 &-1 & 0 
\end{pmatrix} \\ % s3 x s2

& (a + bi + cj + dk)j = -c - di + aj + bk \\
& \quad\mapsto 
J_R'\begin{pmatrix}
a \\ b \\ c \\ d
\end{pmatrix}
=
\begin{pmatrix}
-c \\ -d \\ a \\ b
\end{pmatrix}, \ 
J_R' :=
\begin{pmatrix}
0 & 0 &-1 & 0 \\
0 & 0 & 0 &-1 \\
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 
\end{pmatrix} \\ % s2 x s0

& (a + bi + cj + dk)k = -d + ci - bj + ak \\
& \quad\mapsto 
K_R'\begin{pmatrix}
a \\ b \\ c \\ d
\end{pmatrix}
=
\begin{pmatrix}
-d \\ +c \\ -b \\ a
\end{pmatrix}, \ 
K_R':=
\begin{pmatrix}
0 & 0 & 0 &-1 \\
0 & 0 & 1 & 0 \\
0 &-1 & 0 & 0 \\
1 & 0 & 0 & 0 
\end{pmatrix} \\ % s1 x s2

\end{align}
```
まだ少し調整が必要なのでプライム($'$)を付けてある。このままで問題があるのは、$I_R' J_R' K_R'$という行列積を考えるとこれは右から$kji (= -ijk =1)$を掛けた操作になってしまう。順序を入れ替えたり符号の調整をすることで対処できるが、ここでは3つとも符号を入れ替えたものを採用することにする：
```math
\begin{align}
I_R &:= -I_R' =
\begin{pmatrix}
0 & 1 & 0 & 0 \\
-1& 0 & 0 & 0 \\
0 & 0 & 0 &-1 \\
0 & 0 & 1 & 0 
\end{pmatrix} \\ % s3 x s2
J_R &:= -J_R' =
\begin{pmatrix}
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
-1& 0 & 0 & 0 \\
0 &-1 & 0 & 0 
\end{pmatrix} \\ % s2 x s0;
K_R &:= -K_R' =
\begin{pmatrix}
0 & 0 & 0 & 1 \\
0 & 0 &-1 & 0 \\
0 & 1 & 0 & 0 \\
-1& 0 & 0 & 0 
\end{pmatrix} \\ % s1 x s2
\end{align}
```
これで晴れて、
```math
{I_R}^2 = {J_R}^2 = {K_R}^2 = I_R J_R K_R = -E
```
が得られた。

# 可換なので
　こうして得られたふたつの表現、$[I_L, J_L, K_L]$の任意の元と$[I_R, J_R, K_R]$の元は可換である。何故って四元数の乗算は結合的なので、左から$j$を掛けて右から$k$を書けるような操作は順序を入れ替えても結果は変わらない。四元数の結合性が表現行列の可換性になっているというのはなんとも面白い。
　ところでこの3つの行列同士の積から1の平方根となる行列が9つ得られる。これまでの6つの$-1$の平方根となる行列と単位行列をあわせて16の行列があることになるが、これは$4 \times 4$行列の基底を覆い尽くしている。後で考えるが、Pauli行列$[\sigma_0, \sigma_1, -i\sigma_2, \sigma_3]$のダイアド積から作っていることになるのでこれは自然なことで、適当に$i$を掛けて符号を調整することでGamma行列を作っているのと同じことになる。例えば計量が$(--+++)$となうような5つの互いに反交換な行列は$[I_L, J_L, K_L I_R, K_L J_R, K_L K_R]$のように選ぶことができる。
また、このことから四元数を4次元ベクトルとみなしたときの任意の線形変換が
```math
q' = \sum_{p,q=0}^3 m_{pq} (e_p q e_q)
```
（ただし$[e_0, e_1, e_2, e_3] = [1, i, j, k]$）のように16個の実係数$m_{pq}$で書けることなどもわかる。
# Pauli行列との関係
　四元数の表現行列が複素数の$2 \times 2$行列で書けることはよく知られているが、実行列での表現を探す際にもPauli行列は部品として有用である。ただし実数に限られれるので、$\sigma_2$に関しては（複素数の虚数単位の表現にも使われる）
```math
-i \sigma_2 = 
\begin{pmatrix}
0 &-1 \\
1 & 0
\end{pmatrix}
```
が基本部品となる。残りの$\sigma_0, \sigma_1, \sigma_3$は$1$の平方根であるため、$-1$の平方根である$i, j, k$の表現には$-i\sigma_2$がダイアド積（$\otimes$）の中に一回出てくる必要がある。ダイアド積は$外側\otimes内側$になるようにしておくと、
```math
\begin{align}
I_L =& \sigma_0 \otimes (-i \sigma_2) \\
J_L =& (-i\sigma_2) \otimes \sigma_3 \\
K_L =& (-i\sigma_2) \otimes \sigma_1 \\
I_R =& -\sigma_3 \otimes (-i\sigma_2) \\ 
J_R =& -(-i\sigma_2) \otimes \sigma_0 \\
K_R =& -\sigma_1 \otimes (-i\sigma_2)
\end{align}
```
となっていることがわかる。それぞれの可換、非可換もひと目でわかるようになっている。
　念のために乗算表：
```math
\begin{align}
\sigma_1 (-i\sigma_2) = -(-i\sigma_2) \sigma_1 = \sigma_3 \\
(-i\sigma_2) \sigma_3 = -\sigma_3 (-i \sigma_2) = \sigma_1 \\
-\sigma_3 \sigma_1 = \sigma_1 \sigma_3 = -i\sigma_2
\end{align}
```

# 参考文献
 * [四元数の実行列表現を作る](https://7shi.hateblo.jp/entry/2020/02/24/042840)
 * [絶対虚数単位を使いたくない人のための四元数表現](https://zenn.dev/kaityo256/articles/quaternion_wo_imaginary)