淺釋"蒙地卡羅"算法:用"亂數"找π值
叫"蒙地卡羅"的原因,是因為似賭場:在一段長時間內,賭局的結果應趨向預期的機會率。
例如賭大小,玩一百萬局的話,大與小應趨向各佔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)
}
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 的定義,正是基於 四方形與內接圓的面積成正比。
留言
發佈留言