■平行体の体積とグラミアン(その81)

 阪本ひろむ氏より,モンテカルロ法による体積の計算関数の性能はいまいちであるとの連絡が入った後,追加連絡がきた.

===================================

 モンテカルロ法はそれなりの結果がでた。qhullでフリーズするようなデータも何とか処理できた。処理規模が小さきとき(次元が低い、頂点数が少ない)は、qhullのほうがよい。処理規模が多いと、もともとCで書かれたプログラムqhullはアンダーフローするし、メモリが高いオーダーで増える。

 乱数の発生を指定する方法に苦慮した。処理対象の図形が小さすぎたのである。モンテカルロ法で「外れ」が多いと、体積0という結果が出てきてしまう。

 MathematicaのRandomReal[{0,1/2}, {n, d}]]では、

  0≦xj≦1(j=1,...,d)なるx=(x1,...,xd)

をn個発生させる。体積算出の対象となる図形は非常に小さいので、乱数の個数を増やさないとすぐ体積0という結果になってしまう。

 これは禁じ手かもしれないが、頂点の座標から図形をぴったり包む立方体の座標を算出し、xがこの中に入るように細工した。

 これにより、qhullよりも高い次元、多くの頂点数をもつ図形の体積が算出

された。ただし、nをよほど大きくしない限り、正解は有効数字3桁程度というところだろうか。nを大きくとっても、メモリはそれほど食わないようだが、時間がかかるので適当なところで妥協した。

===================================