ビュフォンの針

提供: miniwiki
移動先:案内検索

ビュフォンの針(ビュフォンのはり、: Buffon's needle problem)は18世紀博物学者ジョルジュ=ルイ・ルクレール、コント・ド・ビュフォンが提起した数学上の問題である。

もし床に多数の平行線を引き、そこに針を落すならば、どれかの線と針が交差する確率はどのようになるかという問題である。

積分と幾何学を使ってこの問題は解け、またこの方法を使って、モンテカルロ法円周率の近似値を求められる。

解法

ファイル:Buffon needle.gif
a は線と交差する場合、 b は交差しない場合

この問題を数学的に表現すると以下のようになる: 長さ [math]l[/math] の針を、間隔 [math]t[/math] で平行線が描かれた床に落としたときに、線と針が交差する確率はどれくらいか?

針の中心から近いほうの線までの距離を [math]x[/math] とし、針と線がなす角の小さい方を [math]\theta[/math] とする。

[math]0[/math] から [math]t/2[/math] における [math]x[/math]確率密度関数

[math] \begin{cases} \frac{2}{t} &:\ 0 \le x \le \frac{t}{2}\\ 0 &: \text{elsewhere.} \end{cases} [/math]

である。

また、[math]0[/math] から [math]\pi/2[/math] における [math]\theta[/math] の確率密度関数は

[math] \begin{cases} \frac{2}{\pi} &:\ 0 \le \theta \le \frac{\pi}{2}\\ 0 &: \text{elsewhere.} \end{cases} [/math]

である。

2つの確率変数 [math]x[/math][math]\theta[/math] は独立なので、同時確率密度関数は積をとって

[math] \begin{cases} \frac{4}{t\pi} &:\ 0 \le x \le \frac{t}{2}, \ 0 \le \theta \le \frac{\pi}{2}\\ 0 &: \text{elsewhere.} \end{cases} [/math]

となる。

針と線が交差するのは

[math]x \le \frac{l}{2}\sin\theta.[/math]

のときである。

針の長さに応じて2つの場合に分けて考える。

場合分け1: 針が短い場合

[math]t \ge l[/math] の場合、針と線が交差する確率は

[math]P = \int_{\theta=0}^{\frac{\pi}{2}} \int_{x=0}^{(l/2)\sin\theta} \frac{4}{t\pi}\,dx\,d\theta = \frac{2 l}{t\pi}.[/math]

となる。

この式を用いてシミュレーションによって円周率の近似値を求めることができる(モンテカルロ法)。 針を [math]n[/math] 回落としたときに針と線が [math]h[/math] 回交差したとすると

[math]\frac{h}{n} \sim \frac{2 l}{t\pi},[/math]

であったということなので [math]\pi[/math] の値は

[math]\pi \sim \frac{2{l}n}{th}.[/math]

で近似できる。

場合分け2: 針が長い場合

[math]t \lt l[/math] の場合、針と線が交差する確率は

[math]\int_{\theta=0}^{\frac{\pi}{2}} \int_{x=0}^{m(\theta)} \frac{4}{t\pi}\,dx\,d\theta[/math]

となる。ここで [math]m(\theta) [/math][math](l/2)\sin\theta[/math][math]t/2[/math] の最小値である。

上の積分を行うと [math]t \lt l[/math] のとき、針と線が交差する確率は、

[math]\frac{2 l}{t\pi} - \frac{2}{t\pi}\left\{\sqrt{l^2 - t^2} + t\sin^{-1}\left(\frac{t}{l}\right)\right\}+1[/math]

または

[math] \frac{2}{\pi} \cos^{-1}\frac{t}{l} + \frac{2}{\pi} \frac{l}{t} \left\{1 - \sqrt{1 - \left( \frac{t}{l} \right)^2 } \right\}. [/math]

となる。

2つ目の式において、1番目の項は針が常に少なくとも1つの線と交差するような角度で落ちる確率を表す。2番目の項は位置によっては交差しない可能性のある角度で落ちたときに針と線が交差する確率を表す。

ラザリニの実験

1901年にイタリア数学者マリオ・ラザリニはビュフォンの針の実験を行った。3408回針を投げて、よく知られた円周率の近似値 355/113 を得た。この近似値と π との差は 3 × 10−7 以下である。印象的な結果ではあるが、以下の理由でフェアな実験でなかったとされている。

ラザリニは線の巾の 5/6 の長さの針を選んだがその場合、針が直線と交差する確率は 5/3π である。n 回落下させて x 回交差したことから求められる π の値は

π5/3 · n/x

π355/113 に近いので(5桁以下の整数を使った分数の近似値でこれより近い分数はない)、nx は下式のように書かれる:

355/113 = 5/3 · n/x

または

x = 113/213n

である。π の近似値を求めるのであるが、355/113 は正しい値に近いので、n を 213 の整数倍の数字を選ぶことによって、113 の整数倍の数になる結果を得れば実験は成功する。

213 回の実験で 113 が得られれば π の小数点以下 6 桁の近似値が求まったことになり、そうでなければ実験を続ければよい。ラザリニは 3408 = 213 × 16 回の実験で、希望の近似値を得たことになった。

シミュレーションにおける依存の循環

この実験をコンピュータでシミュレーションして円周率の近似値を求める際に、[math]0[/math] から [math]\pi/2[/math]までの一様分布を用いて[math]\theta[/math]を決めてしまうと(求めようとしている値であるはずの)円周率の値への依存が発生してしまう。依存を回避するには、以下の擬似コードのように単位円の内側の点をランダムに選ぶことで円周率を使わずに[math]\sin \theta[/math]の値を求めればよい[1]

function simulation(l, t, n)
    h = 0
    for (iter = 0; iter < n; iter++)
        x = Uniform(0, t/2)
        repeat
            dx = Uniform(0, 1)
            dy = Uniform(0, 1)
            radius = sqrt(dx*dx + dy*dy)
        until radius <= 1
        if x <= (l/2) * (dy/radius)
            h = h + 1
    return 2*l*n / (t*h)

ここで Uniform(a, b) はaからbまでの一様乱数を表す。なお擬似コードでは簡単のため例外処理は省略している。

脚注