時空代数の逆元の求め方を思いついたそれまでの発想や過程を説明したい.時空代数の任意の元は
のようにあらわせる.は二乗が,それ以外の1次基底はである.余談であるが,の添え字が少々独特なのはC言語で
typedef struct { double est[4][4]; }est;
と配列の構造体で表すときを考えたためである.さて時空代数の元幾何積(普通の積)は行列を使って,
とあらわせる.係数行列はのようにを省略して符号と添え字のみで書いた.さてこの行の成分がとなるようなを求めたいわけだ.最初は掃き出し法やらで求めようと思っていたがさすがに16*16で無理がある.プログラミングでもやってみたが計算に時間がかかりすぎてフリーズする.そこで後から割ればいいため積が0次となるようなを求めようと考えた.の成分がの同基底の成分の倍で表せると仮定し,基底が
の成分に分けて考えようと思った.つまりはにはのどちらかが入るとして,
と仮定し,
として,例えばの成分が要するにになるためには,は省略するが
になるようながどちらになるかの組み合わせを求めればいい.誤解を招きそうなので言及するが例えばのには具体的な数は入らず,がならその組み合わせの他のもである.そのようにしたのは逆元に空間等方性は持ってほしいというわたくしの要請である.0次以外がになればいいのでこれをそれぞれ行い,すべてに共通するの組み合わせを見つければいいということである.それを表にまとめた.ただしは省略し,組み合わせに全体をしたものを含むのでをで固定する.
1 | ||||||||
---|---|---|---|---|---|---|---|---|
5 | ||||||||
2 | ||||||||
3 | ||||||||
---|---|---|---|---|---|---|---|---|
1 |
4 | ||||||||
---|---|---|---|---|---|---|---|---|
1 |
2 | ||||||||
---|---|---|---|---|---|---|---|---|
3 | ||||||||
4 | ||||||||
1 |
2 | ||||||||
---|---|---|---|---|---|---|---|---|
4 | ||||||||
5 |
4 | ||||||||
---|---|---|---|---|---|---|---|---|
3 |
2 | ||||||||
---|---|---|---|---|---|---|---|---|
3 | ||||||||
5 |
1 | ● | ● | ● | ● | |||
---|---|---|---|---|---|---|---|
2 | ● | ● | ● | ● | |||
3 | ● | ● | ● | ● | |||
4 | ● | ● | ● | ● | |||
5 | ● | ● | ● |
同基底の成分の倍かつ空間等方性の過程で積が0次のみになるような元はないことがわかる.落胆するのはまだ早い.次はさらにかけて0次になるような元を探せばいいのである.これは簡単に見つかる.組み合わせ1から5どれを使ってもよさそうなのだがより成分がになっている組み合わせのひとつである組み合わせ1で考えてみると,
として積は0次のみになる.よってをそれぞれとすると,
が成り立つ.
このことから逆元を求める.
これで逆元が求まった.余談であるがプログラムにする時を考えて組み合わせ1を倍した組み合わせ
にしたほうがを行う回数が減るため好ましい.C言語での例を書いておく.は時空代数の幾何積の関数である.
double DETST(est e1) { est e2 = e1; e2.est[0][0] *= -1; e2.est[3][0] *= -1; e2.est[3][1] *= -1; e2.est[3][2] *= -1; e2.est[3][3] *= -1; e2.est[2][0] *= -1; est e3 = PST(e1, e2); e3.est[0][0] *= -1; return PST(PST(e1, e2), e3).est[0][0]; } est IST(est e1) { double d = DETST(e1); if (d != 0) { est e = { 1 / d }, e2 = e1; e2.est[0][0] *= -1; e2.est[3][0] *= -1; e2.est[3][1] *= -1; e2.est[3][2] *= -1; e2.est[3][3] *= -1; e2.est[2][0] *= -1; est e3 = PST(e1, e2); e3.est[0][0] *= -1; return PST(PST(e2, e3), e); } return e1; }