蒙特卡羅法求圓周率

jackwolfey發表於2024-06-07

蒙特卡羅法求圓周率

  • 蒙特卡羅法也稱統計模擬法、統計試驗法。是把機率現象作為研究物件的數值模擬方法。是按抽樣調查法求取統計值來推定未知特性量的計算方法。蒙特卡羅是摩納哥的著名賭城,該法為表明其隨機抽樣的本質而命名。故適用於對離散系統進行計算模擬試驗。在計算模擬中,透過構造一個和系統效能相近似的機率模型,並在數字計算機上進行隨機試驗,可以模擬系統的隨機特性。

  • 本文使用蒙特卡羅法來求解圓周率π

上圖是一個單位圓在笛卡爾座標系的四分之一部分,在這個1x1的正方形內隨機撒點。假設我們撒的點足夠多,多到能夠覆蓋到這個正方形內的每一個點,此時我們用圓內點的數量除以整個點的數量就是面積的比,即四分之π,此時用這個值乘以4就得到了圓周率的近似值


Python程式碼實現

from random import random
 
DOTS = 1_0000_0000 # 撒點個數
hits = 0.0
for i in range(1, DOTS + 1):
    x, y = random(),random()  # random.random() 產生0-1之間的一個隨機數
    dist = pow(x ** 2 + y ** 2, 0.5)  # 根號下x^2 + y^2,求到原點的距離
    if dist < 1:  # 距離小於1,則說明落在了圓內
        hits += 1
pi = 4 * (hits / DOTS)
print("圓周率的值是:{}".format(pi))

相關文章