四元数パッケージ

このパッケージは,ハミルトン(Hamilton)の四元数を実装する.四元数は という形式で表される.ここで はすべて実数である.記号 は規則 に則って乗算される.四元数は複素数の拡張でありほとんど同じように動作するが,四元数では乗法が可換ではないという点が異なる.例えば, となるのである.

四元数と複素数は類似しているため,このパッケージでは,Wolfram言語が複素数を取扱う方法を模倣している部分が多くある.四元数と複素数との違いを明確にするために,四元数はすべてQuaternion[a,b,c,d]という形式(abcd は実数)で入力しなければならない.記号形式の a+Ib+Jc+Kd に提供されるサポートは限られている.

Quaternion[a,b,c,d]四元数
QuaternionQ[w]w が四元数であるかどうかテストする
FromQuaternion[w]Quaternionオブジェクト w を記号形式 a+Ib+Jc+Kd に変換する
ToQuaternion[w]可能な場合に wQuaternionオブジェクトに変換する

四元数の定義・テスト・変換

以下でパッケージをロードする.
In[1]:=
Click for copyable input
QuaternionオブジェクトはComplexあるいはRealの数に,自動的には簡約されない.
In[2]:=
Click for copyable input
Out[2]=
FromQuaternionを使って,上記のQuaternionオブジェクトを,頭部Complexを持つオブジェクトに変換する.
In[3]:=
Click for copyable input
Out[3]=

このパッケージの主な目的は四元数の演算を定義することなので,PlusMinusTimesDivide,さらにNonCommutativeMultiplyに規則を加える.Timesが使えるのは,四元数ではない2つの数の乗法および1つの四元数とスカラー数(実数)の乗法だけである.2つの四元数の乗法には,NonCommutativeMultiplyを使わなければならい.

加法は要素ごとに行われる.
In[4]:=
Click for copyable input
Out[4]=
四元数同士の乗法にはではなく必ずを使う.
In[5]:=
Click for copyable input
Out[5]=
以下の乗法は非可換である.
In[6]:=
Click for copyable input
Out[6]=
DivideはWolfram言語の内部規則により即座にTimesに変換されるので注意する.
In[7]:=
Click for copyable input
Out[7]=

四元数は複素数と同様で代数的オブジェクトであるが,各要素を見ることが役に立つことがある.これらのオブジェクトは実数上に,標準基底をとするベクトル空間を形成する.各要素は,Wolfram言語の標準的な手法を使って抽出することができる.この他,長さや向きのような他のベクトル型のパラメータもあるので,これらも見ておいた方がよいであろう.

四元数の 空間への射影,つまり四元数の実数でない部分は,純四元数と呼ばれる.これは複素数の純虚数部分と同様の働きをする.

Re[w]実数部分 Re w
Conjugate[w]四元数の共役
Abs[w]絶対値
AbsIJK[w]w の純四元数の大きさ
Norm[w]w の要素の平方和
Sign[w]四元数 w の符号
AdjustedSignIJK[w]最初の非零要素が正となるよう調整された w の純四元数

四元数の要素関数

四元数の共役では,実数要素以外の符号が逆になる.
In[8]:=
Click for copyable input
Out[8]=
四元数の符号は複素数の符号と同様に定義されている.符号は四元数の「向き」である.
In[9]:=
Click for copyable input
Out[9]=
以下はノルム1,実数部分0の四元数を返す.
In[10]:=
Click for copyable input
Out[10]=
以下は標準的なユークリッド長を返す.
In[11]:=
Click for copyable input
Out[11]=
I要素にゼロのある四元数でも,ゼロではない純四元数を持つ.
In[12]:=
Click for copyable input
Out[12]=

複素数 では,によって定義される.このパッケージも同様に を定義しており,複素数の純虚数部分の代りに純四元数 q を使っている.この定義は次の初級関数の定義と同様である:ExpLogCosSinTanSecCscCotArcCosArcSinArcTanArcSecArcCscArcCotCoshSinhTanhSechCschCothArcCoshArcSinhArcTanhArcSechArcCschArcCoth

四元数の指数は非常に複雑になる可能性がある.
In[13]:=
Click for copyable input
Out[13]=
複素数でも同様であるが,分枝切断に注意することが大切である.
In[14]:=
Click for copyable input
Out[14]=
四元数のベキ乗の計算にはド・モアブルの定理(deMoivre's theorem)の四次元形が使われる.
In[15]:=
Click for copyable input
Out[15]=

これまではこの関数で,要素が任意の実数である四元数を扱ってきた.整数とガウス整数が実数および複素数の面白い部分集合であるように,四元整数と呼ばれる四元数の特殊な部分集合がある.この部分集合は,想像するよりも範囲が広い.これには,すべてが整数要素からなる四元数だけでなく,全要素がの奇数倍である四元数も含まれる.この部分集合には,逆元を持つ四元数が24個ある.これらはこの代数の単位であり,ほぼガウス整数の に相当する.

Round[w]w に最も近い四元整数
OddQ[w]w が奇数かどうかをテストする
EvenQ[w]四元数 w が偶数かどうかをテストする
IntegerQuaternionQ[w]四元数 w が四元整数であるかどうかをテストする
UnitQuaternionsハミルトン(Hamilton)の非可換体の24の単位のリストを返す
UnitQuaternionQ[w]w が単位四元数であるかどうかをテストする

整数四元関数

四元数のRoundは,すべての要素が整数またはの奇数倍であるQuaternionを返す.
In[16]:=
Click for copyable input
Out[16]=
ノルムが偶数ならば,その四元数は偶数である.
In[17]:=
Click for copyable input
Out[17]=
四元整数の要素はすべて整数あるいはすべて奇数の整数の半分である.
In[18]:=
Click for copyable input
Out[18]=

四元数 と単位四元数 があるとき, はそれぞれ の右結合および左結合である.任意の結合要素を選び,それを主結合と呼ぶと便利である.このパッケージでは最大の実数要素を持つ結合要素を選ぶ.

LeftAssociates[w]四元数 w の24の左結合のリスト
RightAssociates[w]四元数 w の24の右結合のリスト
PrimaryLeftAssociate[w,side]四元数 w の主左結合
PrimaryRightAssociate[w,side]四元数 w の主右結合

整数の四元数の結合

以下は四元数の主左結合である.
In[19]:=
Click for copyable input
Out[19]=
通常,主右結合も非常に類似したものとなる.
In[20]:=
Click for copyable input
Out[20]=

四元数の乗算は非可換であるため,左側と右側の両方に1つずつ最大公約数がある.この関数はPrimaryLeftAssociatePrimaryRightAssociateによって返される値に依存しているので,RightGCDLeftGCDは一意ではない.

LeftGCD[w,u]wu の左の最大公約数
RightGCD[w,u]wu の右の最大公約数
Mod[w,u]u を法とする wwu で乗算したときの剰余)

整数の除算関数の例

この2つの四元数をともに割り切る最大の四元数はQuaternion[1,0,0,0]である.
In[21]:=
Click for copyable input
Out[21]=
LeftGCDRightGCDでは,全く異なる.
In[22]:=
Click for copyable input
Out[22]=
Modは複素数の場合と同じように,四元数にも使える.
In[23]:=
Click for copyable input
Out[23]=
四元数を剰余として指定することができる.
In[24]:=
Click for copyable input
Out[24]=

PrimeQには,任意の数がガウス整数に対して素であるかどうかを調べるオプションGaussianIntegers->Trueがある.このパッケージではPrimeQをさらに拡張して,数が四元数に対して素であるかどうかを調べる.

ラグランジュ(Lagrange)は,すべての整数は最大で4つの平方数の和として表せることを証明した.つまり,整数 n がある場合,q**Conjugate[q]==n となるような整数要素を持つ四元数 q があるということになる.したがって,四元数に対して素である整数は存在しない.実際に,四元数整数は,そのノルムが通常の意味で素数である場合のみ素数である.

PrimeQ[n,Quaternions->True]n が四元数に素であるかどうかをテストする

PrimeQ の拡張

19はガウス整数に対して素である.
In[25]:=
Click for copyable input
Out[25]=
以下は四元数に対して素ではない.これはQuaternion[1,4,1,1]Quaternion[1,-4,-1,-1]に因数分解できるからである.
In[26]:=
Click for copyable input
Out[26]=
Quaternion[1,3,0,1]は素な四元数である.
In[27]:=
Click for copyable input
Out[27]=