機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

四元数

はじめに

四元数という複素数を拡張したような数を紹介します。
複素数の知識があったほうが良いとは思いますが、まあ無くとも大丈夫なはずです。
四元数ははっきり言って応用範囲が狭く、3次元の回転(CGやロボットの姿勢)のみでしか応用されていないように思います。
ですので、本記事ではさらっと紹介するに留めます。

定義

四元数の定義

四元数 q を以下のように定義します。

\begin{eqnarray}
q&=&w+xi+yj+zk=(w,(x,y,z))\ \ (w,x,y,z\in{\mathbb R})\\
&=&w+{\bf v}=(w,{\bf v})\in{\mathbb H}\ \ ({\bf v}=(x,y,z)\in{\mathbb R}^3)\\
\end{eqnarray}
ここで i,j,k は次の計算規則を満たします。
\begin{eqnarray}
&&i^2=-1,\ j^2=-1,k^2=-1,\\
&&ij=-ji=j,\ jk=-kj=i,\ ki=-ik=j
\end{eqnarray}

{\mathbb H}四元数全体の集合を表します。

和と積

四元数の和と積は、以下のように定義されます。

四元数の和と積の定義

q_1=(w_1,(x_1,y_1,z_1))=(w_1,{\bf v}_1),q_2=(w_2, (x_2,y_2,z_2))=(w_2,{\bf v}_2)\in{\mathbb H} に対して、q_1+q_2,q_1q_2 は以下のように定義されます。

\begin{eqnarray}
q_1+q_2&=&\left(w_1+x_1i+y_1j+z_1k\right)+\left(w_2+x_2i+y_2j+z_2k\right)\\
&=&(w_1+w_2)+(x_1+x_2)i+(y_1+y_2)j+(z_1+z_2)k\\
&=&(w_1+w_2,{\bf v}_1+{\bf v}_2)\\
\\
q_1q_2&=&\left(w_1+x_1i+y_1j+z_1k\right)\left(w_2+x_2i+y_2j+z_2k\right)\\
&=&\left(w_1w_2-x_1x_2-y_1y_2-z_1z_2\right)\\
&+&\left(w_1x_2+w_2x_1+y_1z_2-y_2z_1\right)i\\
&+&\left(w_1y_2+w_2y_1+x_1z_2-x_2z_1\right)j\\
&+&\left(w_1z_2+w_2z_1+x_1y_2-x_2y_1\right)k\\
&=&(w_1w_2-{\bf v}_1^\top{\bf v}_2,w_1{\bf v}_2+w_2{\bf v}_1+{\bf v}_1\times{\bf v}_2)
\end{eqnarray}

四元数の積は非可換です。注意してください。
ただし、虚部が {\bf 0}四元数との積は可換です。
[虚部が {\bf 0}四元数との積は可換であることの証明]
(a, {\bf 0}),(w,{\bf v})\in{\mathbb H}, a, w\in{\mathbb R},{\bf v}\in{\mathbb R}^3 とします。
(a, {\bf 0})(w,{\bf v}) を計算します。

\begin{eqnarray}
(a, {\bf 0})(w,{\bf v})=(aw,a{\bf v})
\end{eqnarray}
(w,{\bf v})(a, {\bf 0}) を計算します。
\begin{eqnarray}
(w,{\bf v})(a, {\bf 0})=(wa,a{\bf v})
\end{eqnarray}
以上より、(a, {\bf 0})(w,{\bf v})=(w,{\bf v})(a, {\bf 0}) が示せたので、虚部が {\bf 0}四元数との積は可換であることが示せました。

共役

共役四元数を定義します。

共役四元数の定義

q=(w,{\bf v})\in{\mathbb H} に対して、q の共役四元数 \overline{q}=q^* は以下のように定義されます。

\begin{eqnarray}
\overline{q}=q^*=(w,-{\bf v})
\end{eqnarray}

共役に関する性質

p=(w_p,{\bf v}_p),q=(w_q,{\bf w}_q)\in{\mathbb H} に対して、以下が成り立ちます。

\begin{eqnarray}
&&1.\ \ \ (p+q)^*=p^*+q^*\\
&&2.\ \ \ pp^*=p^*p=(w_p^2+\|{\bf v}_p\|^2,0)=w_p^2+\|{\bf v}_p\|^2\\
&&3.\ \ \ (pq)^*=q^*p^*\\
&&4.\ \ \ 一般に、(pq)^*\not=p^*q^*
\end{eqnarray}

[1の証明]
(p+q)^* を計算します。

\begin{eqnarray}
(p+q)^*&=&\left( (w_p,{\bf v}_p)(w_q,{\bf v}_q)\right)^*\\
&=&(w_p+w_q,{\bf v}_p+{\bf v}_q)^*\\
&=&(w_p+w_q,-{\bf v}_p-{\bf v}_q)\\
\end{eqnarray}
p^*+q^* を計算します。
\begin{eqnarray}
p^*+q^*&=&(w_p,{\bf v}_p)^*+(w_q,{\bf v}_q)^*\\
&=&(w_p,-{\bf v}_p)+(w_q,-{\bf v}_q)\\
&=&(w_p+w_q,-{\bf v}_p-{\bf v}_q)\\
\end{eqnarray}
以上より、(p+q)^*=p^*+q^* が成り立ちます。

[2の証明]
pp^* を計算します。

\begin{eqnarray}
pp^*&=&(w_p,{\bf v}_p)(w_p,{\bf v}_p)^*\\
&=&(w_p,{\bf v}_p)(w_p,-{\bf v}_p)\\
&=&({w_p}^2+\|{\bf v}_p\|^2,w_p(-{\bf v}_p)+w_p{\bf v}_p+{\bf v}_p\times(-{\bf v}_p))\\
&=&({w_p}^2+\|{\bf v}_p\|^2,0)
\end{eqnarray}
p^*p を計算します。
\begin{eqnarray}
p^*p&=&(w_p,{\bf v}_p)^*(w_p,{\bf v}_p)\\
&=&(w_p,-{\bf v}_p)(w_p,{\bf v}_p)\\
&=&({w_p}^2+\|{\bf v}_p\|^2,w_p{\bf v}_p+w_p(-{\bf v}_p)+(-{\bf v}_p)\times{\bf v}_p)\\
&=&({w_p}^2+\|{\bf v}_p\|^2,0)
\end{eqnarray}
以上より、pp^*=p^*p=(w_p^2+\|{\bf v}_p\|^2,0)=w_p^2+\|{\bf v}_p\|^2 が成り立ちます。

[3の証明]
(pq)^* を計算します。

\begin{eqnarray}
(pq)^*&=&\left( (w_p,{\bf v}_p)(w_q,{\bf v}_q) \right) ^*\\
&=&(w_pw_q-{\bf v}_p^\top{\bf v}_q, w_p{\bf v}_q+w_q{\bf v}_p+{\bf v}_p\times{\bf v}_q)^*\\
&=&(w_pw_q-{\bf v}_p^\top{\bf v}_q, -w_p{\bf v}_q-w_q{\bf v}_p-{\bf v}_p\times{\bf v}_q)\\
\end{eqnarray}
q^*p^* を計算します。
\begin{eqnarray}
q^*p^*&=&(w_q,{\bf v}_q)^*(w_p,{\bf v}_p)^*\\
&=&(w_q,-{\bf v}_q)(w_p,-{\bf v}_p)\\
&=&(w_qw_p-(-{\bf v}_q)^\top(-{\bf v}_p),w_q(-{\bf v}_p)+w_p(-{\bf v}_q)+(-{\bf v}_q)\times(-{\bf v}_p))\\
&=&(w_qw_p-{\bf v}_q^\top{\bf v}_p,-w_q{\bf v}_p-w_p{\bf v}_q+{\bf v}_q\times{\bf v}_p)\\
\end{eqnarray}
以上より、(pq)^*=q^*p^* が成り立ちます。

[4の証明]
(pq)^* を計算します。

\begin{eqnarray}
(pq)^*&=&\left( (w_p,{\bf v}_p)(w_q,{\bf v}_q) \right) ^*\\
&=&(w_pw_q-{\bf v}_p^\top{\bf v}_q, w_p{\bf v}_q+w_q{\bf v}_p+{\bf v}_p\times{\bf v}_q)^*\\
&=&(w_pw_q-{\bf v}_p^\top{\bf v}_q, -w_p{\bf v}_q-w_q{\bf v}_p-{\bf v}_p\times{\bf v}_q)\\
\end{eqnarray}
p^*q^* を計算します。
\begin{eqnarray}
p^*q^*&=&(w_p,{\bf v}_p)^*(w_q,{\bf v}_q)^*\\
&=&(w_p,-{\bf v}_p)(w_q,-{\bf v}_q)\\
&=&(w_pw_q-(-{\bf v}_p)^\top(-{\bf v}_q),w_p(-{\bf v}_q)+w_q(-{\bf v}_p)+(-{\bf v}_p)\times(-{\bf v}_q))\\
&=&(w_pw_q-{\bf v}_p^\top{\bf v}_q,-w_p{\bf v}_q-w_q{\bf v}_p+{\bf v}_p\times{\bf v}_q)\\
\end{eqnarray}
(pq)^*=p^*q^* が成り立つとすると、以下が成り立ちます。
\begin{eqnarray}
\left\{
\begin{array}{l}
{\bf v}_p^\top{\bf v}_q=0\\
{\bf v}_p\times{\bf v}_q={\bf 0}
\end{array}
\right.
\end{eqnarray}
{\bf v}_p\not={\bf 0},{\bf v}_q\not={\bf 0} のとき、上記の式を同時に満たすことは無いため、一般に (pq)^*\not=p^*q^* であることが示せました。

絶対値

四元数の絶対値

q=(w,{\bf v})\in{\mathbb H} に対して、q の絶対値を以下のように定義します。

\begin{eqnarray}
 |q|=\left(qq^*\right)^{\frac{1}{2}}=(w^2+|{\bf v}|^2)^{\frac{1}{2}}
\end{eqnarray}
|q|=1 のとき、単位四元数と呼びます。
q が単位四元数の時、w^2+|{\bf v}|^2=1 が成り立ちます。

定義より、qq^*=q^*q=|q|^2 が成り立ちます。

絶対値に関する性質

p,q\in{\mathbb H} に対して、以下が成り立ちます。

\begin{eqnarray}
&&1.\ \ \ |p|=|p^*|\\
&&2.\ \ \ |pq|=|qp|=|p|\ |q|\\
\end{eqnarray}

p=(w_p,{\bf v}_p)=(w_p,(x_p,y_p,z_p)),q=(w_q,{\bf w}_q)=(w_q,(x_q,y_q,z_q))\in{\mathbb H} とします。
[1の証明]
|p|^2 を計算します。

\begin{eqnarray}
 |p|^2=w_p^2+\|{\bf v}_p\|^2
\end{eqnarray}
|p^*|^2 を計算します。
\begin{eqnarray}
 |p^*|^2&=&|(w_p,{\bf v}_p)^*|\\
&=&|(w_p,-{\bf v}_p)|^2\\
&=&w_p^2+\|(-{\bf v}_p)\|^2\\
&=&w_p^2+\|{\bf v}_p\|^2
\end{eqnarray}
以上より、|p|=|p^*| が示せました。

[2の証明]
|pq|^2=|p|^2\ |q|^2 を示せば、|pq|\geq 0, |p|\ |q|\geq 0 より、|pq|=|p|\ |q| が示せます。
また、|pq|^2=|p|^2\ |q|^2 のとき、p,q を入れ替えると、|qp|^2=|q|^2\ |p|^2=|p|^2\ |q|^2 となるので、|qp|=|p|\ |q| が示せます。
よって、|pq|^2=|p|^2\ |q|^2 を示します。
|pq|^2 を計算します。

\begin{eqnarray}
 |pq|^2=w_{p}^{2} w_{q}^{2} + w_{p}^{2} x_{q}^{2} + w_{p}^{2} y_{q}^{2} + w_{p}^{2} z_{q}^{2} + w_{q}^{2} x_{p}^{2} + w_{q}^{2} y_{p}^{2} + w_{q}^{2} z_{p}^{2} + x_{p}^{2} x_{q}^{2} + x_{p}^{2} y_{q}^{2} + x_{p}^{2} z_{q}^{2} + x_{q}^{2} y_{p}^{2} + x_{q}^{2} z_{p}^{2} + y_{p}^{2} y_{q}^{2} + y_{p}^{2} z_{q}^{2} + y_{q}^{2} z_{p}^{2} + z_{p}^{2} z_{q}^{2}
\end{eqnarray}
|p|^2\ |q|^2 を計算します。
\begin{eqnarray}
 |p|^2\ |q|^2=w_{p}^{2} w_{q}^{2} + w_{p}^{2} x_{q}^{2} + w_{p}^{2} y_{q}^{2} + w_{p}^{2} z_{q}^{2} + w_{q}^{2} x_{p}^{2} + w_{q}^{2} y_{p}^{2} + w_{q}^{2} z_{p}^{2} + x_{p}^{2} x_{q}^{2} + x_{p}^{2} y_{q}^{2} + x_{p}^{2} z_{q}^{2} + x_{q}^{2} y_{p}^{2} + x_{q}^{2} z_{p}^{2} + y_{p}^{2} y_{q}^{2} + y_{p}^{2} z_{q}^{2} + y_{q}^{2} z_{p}^{2} + z_{p}^{2} z_{q}^{2}
\end{eqnarray}
以上より、|pq|^2=|p|^2\ |q|^2 が示せました。
よって、|pq|=|qp|=|p|\ |q| が示せました。

|pq|^2=|p|^2\ |q|^2 の計算に用いたプログラム(Sympy)

from sympy.algebras.quaternion import Quaternion
from sympy import *
init_printing()
var('w_p,x_p,y_p,z_p,w_q,x_q,y_q,z_q')
p = Quaternion(w_p,x_p,y_p,z_p)
q = Quaternion(w_q,x_q,y_q,z_q)
pq_nrm2 = expand((p * q).norm() ** 2)
qp_nrm2 = expand((p.norm() ** 2) * (q.norm() ** 2))
display(pq_nrm2)
display(qp_nrm2)

逆元

四元数の逆数

q\not=0 ならば、q は積に関する逆元 q^{-1} をもち、以下のように定義します。

\begin{eqnarray}
q^{-1}=\frac{q^*}{|q|^2}
\end{eqnarray}
q が単位四元数の時、q^{-1}=q^* が成り立ちます。

q^{-1}q の逆元であることを示します。
qq^{-1} を計算します。
\begin{eqnarray}
qq^{-1}&=&\dfrac{qq^*}{|q|^2}\\
&=&\frac{|q|^2}{|q|^2}\\
&=&1
\end{eqnarray}
qq^{-1} を計算します。
\begin{eqnarray}
q^{-1}q&=&\dfrac{q^*q}{|q|^2}\\
&=&\frac{|q|^2}{|q|^2}\\
&=&1
\end{eqnarray}
以上より、q^{-1}q の逆元であることが示せました。

参考文献

3Dグラフィックスのための数学入門 p108-p114
ゲームプログラミングのための3Dグラフィック数学 p67-p68

目次へ戻る