蒙特卡洛方法又稱統計模擬法,隨機抽樣技術,是一種隨機模擬方法,以概率和統計理論方法為基礎的一種計算方法。是使用隨機數來解決很多計算問題的方法。將所求解的問題同一定的概率模型相聯繫,用電子計算機實現統計模擬或抽樣,以獲得問題的近似解。為象徵性地表明這一方法的概率統計特徵,故借用賭城蒙特卡羅命名。
17世紀時,人們就知道用事件發生的「頻率」來決定事件的「概率」。這也是蒙特卡洛法的基本思想。當樣本數量足夠大時,我們可以用頻率去估計概率。這也是求圓周率π的常用方法。
求圓周率π在只有一個隨機數生成器的情況下如何估計π的大小?
當我們在(-1, 1)的範圍內隨機選擇一個坐標(x, y)時,每個坐標點被選中的概率相等。則坐標落在直徑為1的正方形中的圓的概率為:
由切比雪夫不等式可知,在生成大量隨機點的前提下我們能得到儘可能接近圓周率的值。
Python算法實現
import numpy as np
def pi(n, batch=1000): t = 0 for i in range(n // batch): # 隨機獲取坐標 p = np.random.rand(batch, 2) p = (p * p).sum(axis=1) # 計算坐標平方和 t += (p <= 1).sum() # 平方和小於1的即為落在圓中的點 print(4 * t / n)
pi(10 ** 4)pi(10 ** 7)pi(10 ** 8)輸出結果
如圖所示,生成大量隨機點的前提下我們能得到儘可能接近圓周率的值
喜歡的話就掃描下方的二維碼吧!
加入「欺騙大師」共討程序