一分鐘了解蒙特卡洛方法

蒙特卡羅方法是一種計(jì)算方法。原理是通過大量隨機(jī)樣本,去了解一個(gè)系統(tǒng),進(jìn)而得到所要計(jì)算的值。最經(jīng)典的莫過于圓周率π的計(jì)算了。

圓周率π的計(jì)算

單位圓面積為π,并且內(nèi)切與邊長為2的正方形,用隨機(jī)數(shù),10000個(gè)點(diǎn)往下面投,落到圓里面的概率乘以4就是π的值

說明:等式左邊,是圓與正方形面積之比;等式右邊,是落在單位圓內(nèi)的點(diǎn)與落在正方形內(nèi)的點(diǎn)的比值。二者相等。

分析

1、以圓心為原點(diǎn),建立二維坐標(biāo)系;











2、隨便投一個(gè)點(diǎn),這個(gè)記為(x, y),落在圓內(nèi),則到圓心的距離 x*2 + y*2 <= 1;

3、投點(diǎn)10000次,落入圓內(nèi)次數(shù)n,π值為n / 10000 * 4;

Python代碼

分析好了,代碼就很容易實(shí)現(xiàn)了,

import random

def run():
    n = 10**4
    n_pai = 0
    for i in range(1, n + 1):
        x = random.random()
        y = random.random()

        # 落在單位圓內(nèi)部
        if x**2 + y**2 <= 1:
            n_pai = n_pai + 1

    pai = n_pai / float(n) * 4

    print(pai)

if __name__ == '__main__':
    run()
Python

4次模擬結(jié)果

3.142

3.1424

3.1368

3.156

代碼Github地址:  https://github.com/ddxygq/PyCode





作者:柯廣的網(wǎng)絡(luò)日志

微信公眾號(hào):Java大數(shù)據(jù)與數(shù)據(jù)倉庫