2年前にアップロードした「ロボットアームと6次元楕円体」はロボットアームの運動を表現するのに,6次元楕円体が有用であることを解説したコラムである.しかし,実際の手先力空間は6次元楕円体ではなく,この楕円体に外接する高次元の平行多面体(平行2n胞体)となることがわかっている.
この平行多面体の描写は難しくはなく,n次元立方体が描写できればあとはアフィン変換するだけのことである.これについてはコラム
「ロボットアームと6次元直方体」
「高次元の正多胞体」
「n次元楕円をm次元空間に投影する」
などを参照されたい.
ところで,今回のコラムでは6次元楕円体に外接する平行2n胞体の3次元切り口の形を求める問題を取り上げたい.6次元楕円の3次元切り口の形については既に「ロボットアームと6次元楕円体」のなかで求めたが,車イスへの応用に際しては正射影よりも3次元切り口が実際の解析に役立ったという経緯がある.
したがって,多面体の場合も正射影よりも3次元切り口が役立つことが予想されるし,楕円の場合と整合性を図るためにも多面体の3次元切り口の形を求めておくことは必要となろう.
この問題は結構難問になると思われた.たとえば,3次元立方体の2次元切り口を考えてみよう.切り口の形は3角形,4角形,5角形,6角形と多彩であって,そのうえ,平行2n胞体の3次元切り口となるとより複雑になることは避けられないだろう.
また,切り口とはいっても,正確には核空間(カーネル)のことであるから,われわれがイメージするものとはかなり異なったものとなる.おそらく,これまでこの問題を手がけた人はほとんどいないだろうとさえ思われるのである.
===================================
【1】問題の定式化
6次元楕円体に外接する平行2n胞体の描写は簡単なのですが,困ったことに 本稿で取り上げる多面体は6次元に退化した7次元平行14胞体であり,そこでは
τ=J’F
という関係式を考えます.
ここで,Fは6×1の手先力ベクトル
F=(f1,f2,f3,f4,f5,f6)’=(F1,F2)’
で,F1=(f1,f2,f3)’が手先力,F2=(f4,f5,f6)’がモーメント.また,τは7×1の関節トルクベクトル
τ=(t1,t2,t3,t4,t5,t6,t7)’=(T1,T2)’
であって,tiは
timin≦ti≦timax
なる直方体領域をわたります.Jは6×7のヤコビ行列です.
Jτ=JJ’F
JJ’は正方行列ですから,逆行列(JJ’)^(-1)が定義できて
F=(JJ’)^(-1)Jτ
したがって,(JJ’)^(-1)JがJ’の逆行列の役割をすることがわかります.そこで,J’のムーア・ペンローズ行列(疑似逆行列)を(J’)~と書くことにすると
(J’)~=(JJ’)^(-1)J
すなわち
F=(J’)~τ
となります.Jは6×7のヤコビ行列であって,(J’)~はその転置行列のムーア・ペンローズ行列を表します.これより(J’)~も6×7行列となります.
そして,多面体は発生可能なすべての関節トルクの集合(直方体)をヤコビ行列によりF空間に写像したものであって,それは7次元平行14胞体(斜方体)が6次元に退化したものとなります.「退化した」という意味はたとえばサイコロの見取り図を平面上に描いたようなものであって,その場合,τ空間の頂点はF空間の頂点に写るとは限りません.
ところが,ムーア・ペンローズ行列には以下に述べるような欠点があります.F→τ→Fと写像する場合,
(JJ’)^(-1)JJ’=I(単位行列)
となって元のFの値にに戻るのですが,τ→F→τと写像する場合には,
J’(JJ’)^(-1)J≠I(単位行列)
となって元には戻らないのです.元に戻らない場合があるので「疑似逆行列」と呼ばれているのですが,逆行列の標準的な定義は,行列が正方行列ではない場合あるいは特異行列の場合には成り立たないのです.
それでも,行列の疑似逆行列は定義することができて,たとえば,すべての要素の平方和を最小にすることで設定できます.このような逆行列は,一般化された逆行列あるいはムーア・ペンローズ型の逆行列ともいわれます.最小2乗フィットに関連した問題で特によく使われます.
ムーア・ペンローズの一般逆行列に問題があるのですが,(いまのところ)これを避けることはできません.したがって,これから先の議論はすべて「近似的な解」を求めるためのものであることをご了承願います.冗長でない場合は正方行列となるので,真の値を出力してくれるプログラムになっているのですが,冗長な場合であっても「近似解」ならば比較的簡単に求められるのです.
===================================
次に,平行2n面体の断面の形を求めやすくするために,ヤコビ行列を4つの部分行列に分割して
(J’)~ =[A,B]
[C,D]
のようにおきます.4分割すると,
[F1]=[A,B][T1]=[AT1+BT2]
[F2] [C,D][T2] [CT1+DT2]
ここで,モーメントF2をゼロとした3次元空間での切断面
F2=CT1+DT2=0
の核(カーネル)を求めることになるのですが,部分行列Aは左上の3×4行列,Bは右上3×3行列,Cは左下3×4行列,Dは右下3×3行列を表すものとします.
場合によってはf4=0などというような1次元断面を求めたいということもあるでしょう.一般にm次元断面を求めたいときには,Aを(6−m)×(7−m)行列,Bを(6−m)×m行列,Cをm×(7−m)行列,Dをm×m行列とすればよいのです.
また,m=3とした場合,
F2=CT1+DT2=0
は未知変数7に対して方程式が3つしかないため,原点
(0,0,0,0,0,0,0)
はその自明な解であって,それ以外にも無限個の解をもちます.この無限個の解の集合の具体的な形を求めるというのが,このコラムのテーマです.
以上のことより,カーネルは
T2=−D~CT1
なる関係式を満たすことになり,切り口は3次元に退化した4次元図形
F1=AT1+BT2=[A−BD~C]T1
で表されるものと考えられました.
なお,F1=0なる断面を求めたいならば,
(J’)~ =[C,D]
[A,B]
[F1]=[C,D][T1]=[CT1+DT2]
[F2] [A,B][T2] [AT1+BT2]
のように行列の分割を行うと,これまでの議論がそのまま使えます.
念のため申し添えておきますが,
(J’)~ =[A]
[C]
のように縦2分割しても問題は簡単にはなりません.
[F1]=[Aτ] F2=Cτ=0
[F2] [Cτ]
から先には進めなくなるばかりでなく,次節で述べるマッピング解を得るにしても7重ループが必要になるため,計算所要時間も1000倍以上余分にかかります.そうなると計算所要時間が許容できる範囲から逸脱してしまいます.
===================================
【2】マッピング
さて,ここで求めるF2=0切り口は,3次元に退化した4次元図形
F1=[A−BD~C]T1
で表されることがわかったわけですが,その際,T1は
T2=−D~CT1,T2min≦T2≦T2max
を満たす必要があります.
これを満たすような切り口の頂点の座標がすべて計算できればよいのですが,残念ながら,直接頂点の座標を求めることは簡単ではありません.このような理想的な方法は早々に諦めざるを得ないのですが,切り口の形を手っ取り早く計算するには(この時点では)マッピングで代替する以外に手はないだろうと思われました.
この結論には非常にがっかりさせられましたが,やむなくマッピング(ただしサンプリング点は疎)を試みたところ,マッピングでは当初7重ループが必要と思っていたのに,4重ループで済んだので予想以上に短時間で計算できました.最近のPCならば4重ループであっても苦もなく計算できるでしょうから,切り口の形はマッピングで十分実用的な計算ができるものと(この時点では)思われました.
===================================
【3】実行例
マッピング解と6次元楕円体の3次元切り口をオーバーラップさせて表示させてあります.
===================================
【4】補足
最後に,平行2n面体に関連した話題をいくつか選んで掲げておきます.
[1]平行2n面体の体積とグラミアン(グラム行列)
2つのベクトルa↑,b↑を基底とする平行体(平行四辺形)の面積は,外積は
a↑×b↑
3つのベクトルa↑,b↑,c↑を基底とする平行体(平行六面体)の体積は,スカラー三重積
(a↑×b↑)・c↑
すなわち,外積a↑×b↑とベクトルc↑の内積で与えられます.
|a↑|=a,|b↑|=bとすれば,平行四辺形の面積は,
S=absinθ
ですから,
S^2=a^2b^2(1−cos^2θ)
=|a↑|^2|b↑|^2−(a↑・b↑)^2
=|a↑・a↑ a↑・b↑|
|b↑・a↑ b↑・b↑|
同様に,平行六面体の体積は
V^2=|a↑・a↑ a↑・b↑ a↑・c↑|
|b↑・a↑ b↑・b↑ b↑・c↑|
|c↑・a↑ c↑・b↑ c↑・c↑|
で与えられます.
これらのように,内積の行列式で定義される行列式をグラムの行列式(グラミアン)といいます.平行体の面積・体積はグラミアンの平方根に等しくなるというわけです.
また,座標を使って表せば,n+1個の点の座標に(1,1,1,・・・,1)を加えて作られる(n+1)次の行列式の絶対値になります.
|S|=|1 x1 y1| |V|=|1 x1 y1 z1|
|1 x2 y2| |1 x2 y2 z2|
|1 x3 y3| |1 x3 y3 z3|
|1 x4 y4 z4|
原点が含まれるときは,
|S|=|x1 y1| |V|=|x1 y1 z1|
|x2 y2| |x2 y2 z2|
|x3 y3 z3|
のように展開されます.
なお,これらはそれぞれn次元単体の体積のn!倍になりますから,三角形面積,四面体の体積は,
S’=S/2
V’=V/6
また,4辺の長さがa,b,cで与えられた三角形,6辺の長さがa,b,c,d,e,fで与えられた四面体の場合は,
2^2(2!)^2S’^2=|0 a^2 b^2 1|
|a^2 0 c^2 1|
|b^2 c^2 0 1|
|1 1 1 0|
2^3(3!)^2V’^2=|0 a^2 b^2 c^2 1|
|a^2 0 d^2 e^2 1|
|b^2 d^2 0 f^2 1|
|c^2 e^2 f^2 0 1|
|1 1 1 1 0|
となります.
前者はヘロンの公式にほかなりませんが,ヘロンの公式とは,任意の三角形の三辺の長さをa,b,c,面積をΔとして,
Δ^2=(2a^2b^2+2b^2c^2+2c^2a^2−a^4−b^4−c^4)/16
=(a+b+c)(−a+b+c)(a−b+c)(a+b−c)/16
ここで,2s=a+b+cとおくと
Δ^2=s(s−a)(s−b)(s−c)
となり,おなじみの平面三角形のヘロンの公式が得られます.
===================================
[2]菱形格子
平面上に配置した格子点の最近接点間距離が最大値をとるときは,点の配置が正三角形の頂点に等間隔に配置するときであり,空間中の点については,点の配置が立方格子の格子線の交角を60°になるようにゆがめたときであった.
詳細は,コラム「極大格子群とルート系」を参照願いたいのであるが,その際,グラミアンは
G=(d^2/2)^2|2 1|
|1 2|
|2 1 0|
G=(d^2/2)^3|1 2 1|
|0 1 2|
として得ることができた.
そこで,2次元,3次元の場合と同様に,n次元に拡張したグラミアン
|2 1 ・・ 0|
G=(d^2/2)^n|1 2 ・・ 0|=1=V^2
|0 1 ・・ 1|
|0 0 ・・ 2|
より,格子点間距離dと球充填密度を求めてみることにするが,
|2 1 ・・ 0|
|1 2 ・・ 0|=1+n
|0 1 ・・ 1|
|0 0 ・・ 2|
と計算され,
G=(d^2/2)^n(1+n)=1=V^2
d^2n=2^n/(1+n)
と表されることがわかった.
もちろん,このことは1辺の長さが√2の正単体の体積Vnが
Vn=√(1+n)/n!
で与えられること,平行2n面体の体積はn次元単体のn!倍になることと関係しているのだが,これにより,球充填密度は
Δ(n)=vn(d/2)^n
=(π/2)^(n/2)/Γ(1+n/2)/(1+n)^(1/2)
で求められることになる.→コラム「高次元の正多胞体(その4)」参照
|2 1 1| |2 1 0|
|1 2 1|=|1 2 1|=4
|1 1 2| |0 1 2|
|2 1 ・・ 1| |2 1 ・・ 0|
|1 2 ・・ 1| |1 2 ・・ 0|
|1 1 ・・・1|=|0 1 ・・ 0|=1+n
|1 1 ・・ 1| |0 0 ・・ 1|
|1 1 ・・ 2| |0 0 ・・ 2|
===================================
[3]固有値の幾何学的意味
固有多項式の根と係数の関係より,トレース(対角線の項の和)=固有値の総和が成り立つ.トレースは全固有値の和であり,行列式は全固有値の積ある.
ところで,固有値は幾何学的に何に対応しているのであろうか? →単位キューブを線型写像で変換したときの各辺の長さと思えばよい.なぜなら,写像:y=Axによって,単位直方体は平行2n面体に写像されるものとすると,この写像のヤコビアンはJ=|A|となる.
また,グラミアン
G=|A|^2
が成立する.したがって,平行2n面体のn次元体積は
|G|^(1/2)=|A|
で与えられる.すなわち,行列式=体積=固有値の積であって,行列式はn本のベクトルで張られる平行2n面体の体積となることが分かる.
===================================