ある図形を描く場合,頂点の座標をすべて求めそれらを正しく結ぶことができれば理想なのですが,そのような手が使えない場合はマッピングすることになります.
ところが,旧式のPCでF2=0空間のマッピングを試みると,計算時間が莫大でしかも粗い計算しかできません.なにせ最新のPCでも何十分もかかる計算なのですから・・・.すなわち,マッピングはPCのスペックに依存していて,計算アルゴリズムの差が明確に現れない方法なのです.
アルゴリズムを工夫して,その結果,10倍も速い計算方法を生み出すことこそ創造の醍醐味であって,力ずくで労力さえかければ必ずできるようなプログラムは,小生的にはあまり好みとはいえない解法です.そこで,今回のコラムでは旧型のPCであっても数分以内にF2=0空間のほとんどの領域(概形)を網羅できるという探索的アルゴリズムについて紹介したいと思います.
ただし,近似解の近似ですから,この探索的アルゴリズムでもって多面体の正確な断面の形を決めることは困難であり,あくまでも許容できる範囲の計算精度と計算速度をもった断面の概形ということになります.
===================================
【1】探索的アルゴリズム
fkをn次元多面体のk次元面の数とし,
(f0,f1,・・・,fn-2,fn-1)
を構成要素とするn次元正多胞体では,組み合わせ的方法によって,k次元胞数fkが求められます.
たとえば,正単体では
fk=(n+1,k+1)
なのですが,k=n−1のときfk=n+1であって,胞数はn+1と計算されます.同様に,双対立方体では
fk=2^k+1(n,k+1),k=n−1のとき,fk=2^n
立方体では
fk=2^n-k(n,k),k=n−1のとき,fk=2n
となります.
もちろん,
正単体:fk=(n+1,k+1)
双対立方体:fk=2^k+1(n,k+1)
立方体:fk=2^n-k(n,k)
はオイラー・ポアンカレの定理:
f0−f1+f2−・・・+(−1)^(n-1)fn-1=1−(−1)^n
すなわち,nが奇数なら2,偶数なら0を満たします.この定理は正多胞体に限らず,n次元凸多胞体について常に成立します.
n次元立方体(正2n胞体)の場合,
頂点数: 2^n,
稜数: 2^(n-1)n,
四角形数:2^(n-3)n(n−1)
となるのですが,このことからn次元直方体の頂点数<稜数であり,カーネルの形の概略を知るには稜を基線とすればよいことがわかります.
このプログラムでも稜に平行な直線上を探索することによって,カーネルを求めています.その考え方はシンプレックス法に似ていますが,頂点上や稜上に解があることはほとんどなく,内部探索を行わなければなりません.
探索的アルゴリズムは妥協の産物であって,この方法で得られる領域はどうしても探索漏れをなくすことはできませんから,(その1)で求めたカーネルよりやや小さめに描かれます.結局,正確な形を描くことを断念し,許容範囲の計算所要時間と計算精度をもつ近似計算をすることにしたのですが,しかし,短時間で断面の概形を知りたいときには簡易探索でもまあまあかというのが率直な感想です.
===================================
【2】実行例
マッピング解(その1)のほとんどの領域を短時間でカバーすることができました.
===================================
【3】凸包アルゴリズム
コラム「ロボットアームと6次元直方体」では,輪郭線処理としてn次元立方体の特性を利用した方法を紹介しました.この方法を応用するとn次元双対立方体でもn次元単体の場合でも描けます.→「高次元の正多胞体」
しかし,平行2n面体の断面の形はそれらに較べて規則的ではないため,このような輪郭線処理を行うことができません.そのような場合の一般的な解法として凸包(convex hull)アルゴリズムが知られています.
平行2n面体の頂点の数は2^nであり,nの増加とともに指数関数的に増えますし,2^n個から2次元に射影した場合の頂点数2n個を探し出すのはかなりの計算量が必要となります.
単純に考えると,平面上のn個の点の凸包を構成するアルゴリズムの計算量はO(n^3)となりそうですが,ここで作成したアルゴリズムではO(nlogn)となったので,格段の性能のよさにびっくりさせられました.
===================================
【4】補足(高次元の球と立方体の断面の体積)
(1)ボールの不等式
n次元単位立方体の断面の体積の最大値について考えてみましょう.
1辺の長さが1の正方形(2次元単位立方体)の切り口は単に線分になるから,その長さが最大となるのは対角線であって,最大値は√2となる.対角線とは頂点とその対角にある頂点を結ぶ線分で,正方形の原点を通るものである.
また,(3次元)単位立方体の断面は,3角形・4角形・5角形・6角形などいろいろな形をとるが,立方体の中心を通り,辺とその対蹠に位置する辺を含む平面で切ったとき,断面積は最大値√2になる.
2次元・3次元での問題は,4次元の場合あるいは考察をもっと高次元化していくこともできますが,n次元単位立方体を中心を通るn次元超平面で切ったとき,その切り口の体積(断面積)Vは,
1≦V≦√2
であることが,ボールによって証明されています(1986年).
ボールの不等式のいいところは,Vが次元によらず,√2で上から評価されている点です.ボールの不等式は2,3次元でも一般次元でも同じ形で成立しましたが,こんなことがつい最近まで証明されなかったのは,一般次元における幾何の問題は,高い次元になると多くの反例が作れるからだと想像されます.
(2)ビューズマンの定理とボールの反例
一方,半径rのn次元超球の体積はVnr^nですから,体積を1とするrの値はVn^(-1/n)で与えられます.また,n次元超球の中心を通る超平面による切り口は(n−1)次元超球であり,その体積はVn-1r^(n-1)で表されますから,体積が1の超球の切り口の体積は
Vn-1・Vn^(1/n-1)
となります.
n Vn-1・Vn^(1/n-1)
2 1.128
3 1.209
4 1.265
5 1.307
6 1.339
7 1.365
8 1.387
9 1.405
10 1.420
11 1.434
12 1.445
13 1.456
14 1.465
体積1の10次元超球について,その実際の値を計算してみると1.4203・・・となり,体積1の10次元単位立方体の超平面による切り口の体積√2よりも大きくなります.ここで,半径rをほんの少し縮小した超球を考えてみると,単位立方体より断面積は大きいが体積は小さい例を作れることがわかります.
ところで,3次元空間内の2つの点対称凸体K,K’に関して,凸体の中心を通る任意の平面について,断面積の不等式
A(K)>A(K’)
が成り立つならば,体積についても不等式
V(K)>V(K’)
が成り立つことが知られています(ビューズマンの定理,1953年).
すなわち,10次元のボールの例は,
A(K)>A(K’)
であっても
V(K)<V(K’)
という高次元におけるビューズマンの反例になっているのです.
さて,10次元以上の一般次元であれば,このような反例が具体的に与えられるのでしょうか?
An=Vn-1・Vn^(1/n-1)
とおくと,
An/An-2=Vn-1・Vn^(1/n-1)/Vn-3・Vn-2^(1/(n-2)-1)
ですから,n→∞のとき,
An/An-2→(Vn/Vn-2)^(1/n)=(2π/n)^(1/n)→1
これより,次元を高くすれば断面積はある極限値に収束しそうです.n→∞のとき,Vn-1→0,Vn→0ですが,An=Vn-1・Vn^(1/n-1)の極限値を求めてみることにしましょう.
Vn=π^(n/2)/(n/2)!より,
An={(n/2)!}^(1-1/n)/{(n-1)/2}!
これを有名なスターリングの近似公式
k!=√2π・k^(k+1/2)・exp(−k)
を使って書き直してみましょう.簡約化すると
An→(n/2)^(n/2)/{(n-1)/2}^(n/2)
={n/(n-1)}^(n/2)
={(1+1/(n-1))^(n-1)}^(1/2)*{n/(n-1)}^(1/2)
→e^(1/2)
したがって,極限値√e=1.6487・・・に収束することがわかります.
√2<√e<√3
ですから,これは高次元ではボールの反例がいくらでも作れることを意味しています.
逆に,9次元以下ではボールの反例は作られませんが,それ以外のビューズマンの反例については,5次元以上で存在することが証明されています(1992年).しかし,4次元で反例が作れるかどうかは,現在,未解決の問題として残されています.
===================================