淺釋"蒙地卡羅"算法:用"亂數"找π值

叫"蒙地卡羅"的原因,是因為似賭場:在一段長時間內,賭局的結果應趨向預期的機會率。

例如賭大小,玩一百萬局的話,大與小應趨向各佔50%。

* * * * *

來求Pi(π),在第一象限(右上,X, Y 均為正數)隨機選四個點,可能得到下圖的結果。

其比例:

        圓內的點數  除以  整個四方形的點數     =     3/4

所以,整個圓形便是乘四:  3/4 x 4 = 3

我們知道 π 是 3.14... 結果誤差只有0.14..,看來不錯。如果我們隨機選四十點、四千點、四千萬點,將得出更準確數字。

那問題來了,怎樣判定在圓內(綠色)還是圓外(紅色)?

用亂數選出 x 與 y,算出與圓心距離,如果少過或等於半徑,就是圓內了 。
                 __________
距離 = √ (x^2 + y^2)



用 javascript 程式 展示


function inCircle(x, y) {
    const radius = 1
    let distance = Math.sqrt(x * x + y * y)
    return (distance <= radius) 
}

var inside = 0
const total = 1e6
for (let i = 0;  i < total; i++ ) {
    x = Math.random()
    y = Math.random()
    if (inCircle(x, y))
        inside ++
}

pi = (inside / total) * 4
console.log('Calculated Pi, π is', pi)


我得到的答案是 3.139668,準確到點後二位,不錯吧?  ;)



* * *

知其然,亦要知其所以然,為什麼可算出答案?

你可想像圓內密密麻麻塞滿了點,其數量的比例,等同 面積的比例。

以 1 做半徑
1/4 圓的面積是   (pi * r * r ) / 4 = pi / 4
右上角四方的面積是  r * r = 1

事實上Pi 的定義,正是基於 四方形與內接圓的面積成正比。





留言

此網誌的熱門文章

彩色生命遊戲:戈斯珀滑翔機鎗 Gosper's Glider Gun, Game of Life