4次元球の体積を求める

じゃんけんとかランダムウォークとかほったらかしですが、
思いつきのプログラムネタ。
以前にほんのちょっとだけふれたモンテカルロ法を使ったものです。
円の面積を求めるものはweb上に結構たくさんあったので、
なかなかわけのわからん事をしてやろうと思ったわけです。

4次元球ってなんぞやってところからですが、
簡単に言えば、2次元での円、3次元での球、
で、もうひとつ次元を拡張したものが4次元球です。たぶん。
難しく言うと、4次元空間において、
ある点からの距離が一定以内にある点の集合です。
式はこんな感じ。

\bar x = (x_1,x_2,x_3,x_4)
|\bar x| \leq r

その4次元球の体積(って言うのかな?)は
球の体積の公式から一応計算でも出せますが、(半径rで)
V=2\int_{0}^{r}{\frac{4}{3}\pi (\sqrt{r^2-x^2})^3dx
やれる人はやってみてください。
私が計算したら\frac{1}{2}\pi^2r^4になりました。
まあ計算で出そうとしても結構ややこしい。
計算機にやらせるにしても、格子状の点を全てについて調べるのは、
(前に円の面積から円周率を求めたときと同じような方法ね)
空間が4次元なので調べる量が膨大になってしまいます。
そこでモンテカルロ法の出番です。

前置きはこんなもんで、やり方です。
今回は半径1の4次元球の体積を求めます。

  1. \bar xを決めるため、0〜1の一様乱数を4つ発生させる(x_1...x_4)。
  2. (x_1)^2+(x_2)^2+(x_3)^2+(x_4)^2 \leq 1を満たせばカウントする。
  3. 1、2を繰り返す。
  4. 「半径1の4次元球の体積」=2^4×「カウント数」/「データ数」

まあこれがわかれば、半径rの4次元球の体積は、
r^4をかけた値になるので十分と言うことで。

では結果。
実際の値は小数点以下10桁までで、
\frac{1}{2}\pi^2 = 4.9348022005
です。

データ数推定値
106.4000000000
1005.4400000000
10005.1520000000
100004.9216000000
1000004.9404800000
10000004.9272160000
100000004.9340384000
1000000004.9348697600

あまり期待してなかったが、1億データで小数点以下4桁まであってる。
ついでにグラフも。横軸は対数スケールです。
自然対数の底を求めたときとスケールが違うので注意してね。



何とか、思ったところに収束していっている感じだ。

この方法を使えば、5次元球だろうが6次元球だろうが、
煩雑な積分計算をせずに、比較的楽に体積の近似値が出てくる。
まあ、出したところで、どうなんだろうという感じもするが。
宇宙の起源に半歩ぐらいなら近づけるかな?