Python通過蒙特卡羅法計算 值

2021-10-01 22:35:01 字數 1496 閱讀 1877

我們知道以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 從隨機抽出的樣本中計算出樣本均值,從而得到總體的期望。蒙特卡羅方法的核心 隨機抽樣 主要有直接抽樣,接受 拒絕抽樣,重要性抽樣 隨機抽樣 接受拒絕抽樣...