蒙特卡洛方法 玩具例子 1 圓周率

2021-07-24 11:59:40 字數 1538 閱讀 3617

正方形內部有乙個相切的圓,它們的面積之比是π/4。

由圓面積和正方形面積公式可得:

s圓

面積s正

方形=π

r2(2

r)2=

π4

現在向上面的正方形區域均勻的隨機撒點,通過計算落在圓內的點數與總的點數來估計π

# -*- coding:utf8 -*-

import numpy as np

import matplotlib.pyplot as plt

defpi_exp

(r, n):

x = np.random.uniform(-r * 1.0, r * 1.0, (n,))

y = np.random.uniform(-r * 1.0, r * 1.0, (n,))

incircle = np.sum(np.power(x, 2) + np.power(y, 2) <= (r * 1.0)**2)

error = np.pi - (4.0 * incircle / n)

print error

######################################

theta = np.linspace(0, 2*np.pi, 3600)

cx = r * np.cos(theta)

cy = r * np.sin(theta)

plt.plot(cx,cy, color="r")

######################################

rx = np.asarray([-1, 1, 1, -1, -1] *r, dtype = np.float)

ry = np.asarray([1, 1, -1, -1, 1] *r, dtype = np.float)

plt.plot(rx,ry, color="b")

######################################

cl = ["r"

if i**2 + j**2

<= r else

"b"for i, j in zip(x,y)]

plt.scatter(x, y, c=cl)

plt.text(-1.2, 1.2, s = "r=, n=, error=, pi=".format(r=r, n=n, error=error, pi=np.pi))

plt.show()

if __name__ == "__main__":

pi_exp(1, 10000)

執行結果如下圖:

隨著取樣數的增大,**的

π 與真實

π 之間的誤差會越來越小。

參考:

蒙特卡洛方法計算圓周率

import random import math defcalpai n 10000000 隨機實驗次數 r 1.0 圓的半徑 a,b 0.0 0.0 中心點 x neg,x pos a r,a r x座標取值範圍 y neg,y pos b r,b r y座標取值範圍 count 0 落在圓內的...

蒙特卡洛法求圓周率

利用蒙特卡洛演算法求圓周率是乙個概率的方法,關於這方面的內容很多,而且也很容易理解,更多具體分析過程可以參考如下文章 下面是我的理解和 蒙特卡洛演算法是通過概率來計算pi的值的。對於乙個單位為1的正方形,以其某乙個頂點為圓心,邊為半徑在正方形內畫扇形 乙個1 4的圓形的扇形 那麼扇形的面積就是pi ...

利用蒙特卡洛演算法求圓周率

from 背景知識 蒙特卡洛是摩納哥公國第一大城市,與澳門 美國拉斯維加斯並稱世界三大賭城。位於地中海沿岸,首都摩納哥之北,建於阿爾卑斯山脈突出地中海的懸崖之上。景色優美,是地中海地區旅遊勝地。市內置有豪華的旅館 俱樂部 歌劇院 商店 游泳池 溫泉浴室 運動場等娛樂設施 城內開設有蒙特卡洛大賭場。賭...