一分鐘了解蒙特卡洛方法

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

圓周率π的計算

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

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

分析

1、以圓心為原點,建立二維坐標系;











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

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

Python代碼

分析好了,代碼就很容易實現(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)絡日志

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