我們知道以r為半徑的圓的面積是πr2
\pi r^2
πr2,以r為邊長的正方形的面積是r
2r^2
r2,兩者面積之比即為π
\piπ的值。
具體演算法是模擬乙個邊長為1的正方形,隨機在其中生成n個點,當n趨向於無窮大時,整個正方形就被這n個點所填滿(下圖中藍色區域)。
在這n個點之中,統計出落入以1為半徑的扇形區域中的點的個數(下圖中橙色區域),記為c。
於是扇形面積與正方形的面積之比可以用c/n表示,可得c/n=14π
r2/π
r2=1
4π\frac\pi r^2/\pi r^2=\frac\pi
41πr2
/πr2
=41
π,推得π
\piπ=4*c/n。
import numpy as np
import matplotlib.pyplot as mp
#預設總樣本個數,值越大結果越精確,由於後面要繪製散點圖,這裡先設乙個小一點的值做測試
total_dots=
100000
#隨機生成total_dots個點
x=np.random.random(total_dots)
y=np.random.random(total_dots)
#計算在四分之一圓內的點的個數,用掩碼使滿足要求的值變為1
counts_in_quarter=np.zeros_like(x)
mask=np.sqrt(x**
2+y**2)
<=
1counts_in_quarter[mask]=1
#扇形與正方形的比值再乘以4即為π的值
res=counts_in_quarter.
sum(
)/total_dots
pi=4
*res
print
(pi)
#用matplotlib繪製出樣本分佈的散點圖,藍色代表正方形,橙色代表扇形
python模擬蒙特 卡羅法計算圓周率
蒙特 卡羅方法是一種通過概率來得到問題近似解的方法,在很多領域都有重要的應用,其中就包括圓周率近似值的計問題。假設有一塊邊長為2的正方形木板,上面畫乙個單位圓,然後隨意往木板上扔飛鏢,落點座標 x,y 必然在木板上 更多的時候是落在單位圓內 如果扔的次數足夠多,那麼落在單位圓內的次數除以總次數再乘以...
強化學習 蒙特卡羅法
從本章起,我們開始解決更貼近實際的問題。前面提到我們接觸過的問題有乙個特點,即我們可以知道環境運轉的細節,具體說就是知道狀態轉移概率 p s s t,a t 對蛇棋來說,我們可以看到蛇棋的棋盤,也就可以了解到整個遊戲的全貌,這時我們相當於站在上帝視角,能夠看清一切情況。在很多實際問題中,我們無法得到...
馬爾可夫鏈蒙特卡羅法
蒙特卡羅法 思想 假設概率分布的定義已知,然後通過隨機抽樣獲得概率分布的隨機樣本,通過得到的隨機樣本對概率分布的特徵進行分析。for example 從隨機抽出的樣本中計算出樣本均值,從而得到總體的期望。蒙特卡羅方法的核心 隨機抽樣 主要有直接抽樣,接受 拒絕抽樣,重要性抽樣 隨機抽樣 接受拒絕抽樣...