蒙特卡羅方法 python 實現

2021-09-07 10:34:07 字數 2035 閱讀 4791

蒙特卡羅(monte carlo)方法的精髓:用統計結果去計算頻率,從而得到真實值的近似值

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.patches import circle

# 投點次數

n = 10000

# 圓的資訊

r = 1.0 # 半徑

a, b = (0., 0.) # 圓心

# 正方形區域邊界

x_min, x_max = a-r, a+r

y_min, y_max = b-r, b+r

# 在正方形區域內隨機投點

x = np.random.uniform(x_min, x_max, n) # 均勻分布

y = np.random.uniform(y_min, y_max, n)

# 計算 點到圓心的距離

d = np.sqrt((x-a)**2 + (y-b)**2)

# 統計 落在圓內的點的數目

res = sum(np.where(d < r, 1, 0))

# 計算 pi 的近似值(monte carlo方法的精髓:用統計值去近似真實值)

pi = 4 * res / n

print('pi: ', pi)

# 畫個圖看看

fig = plt.figure()

axes = fig.add_subplot(111)

axes.plot(x, y,'ro',markersize = 1)

plt.axis('equal') # 防止影象變形

circle = circle(xy=(a,b), radius=r, alpha=0.5)

axes.add_patch(circle)

plt.show()

效果圖

'''蒙特卡羅方法求函式 y=x^2 在[0,1]內的定積分(值)'''

def f(x):

return x**2

# 投點次數

n = 10000

# 矩形區域邊界

x_min, x_max = 0.0, 1.0

y_min, y_max = 0.0, 1.0

# 在矩形區域內隨機投點

x = np.random.uniform(x_min, x_max, n) # 均勻分布

y = np.random.uniform(y_min, y_max, n)

# 統計 落在函式 y=x^2影象下方的點的數目

res = sum(np.where(y < f(x), 1, 0))

# 計算 定積分的近似值(monte carlo方法的精髓:用統計值去近似真實值)

integral = res / n

print('integral: ', integral)

# 畫個圖看看

fig = plt.figure()

axes = fig.add_subplot(111)

axes.plot(x, y,'ro',markersize = 1)

plt.axis('equal') # 防止影象變形

axes.plot(np.linspace(x_min, x_max, 10), f(np.linspace(x_min, x_max, 10)), 'b-') # 函式影象

#plt.xlim(x_min, x_max)

plt.show()

效果圖

蒙特卡羅方法 python 實現

蒙特卡羅 monte carlo 方法的精髓 用統計結果去計算頻率,從而得到真實值的近似值。import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import circle 投點次數 n 10000 圓的...

python實現蒙特卡羅方法教程

蒙特卡羅方法是一種統計模擬方法,由馮諾依曼和烏拉姆提出,在大量的隨機數下,根據概率估計結果,隨機資料越多,獲得的結果越精確。下面我們將用python實現蒙特卡羅方法。1.首先我們做乙個簡單的圓周率的近似計算,在這個過程中我們要用到隨機數,因此需要先使用import numpy as np匯入nump...

蒙特卡羅方法

概念 蒙特卡羅方法又稱統計模擬法 隨機抽樣技術 是一種隨機模擬方法,以概率和統計理論方法為基礎的一種計算方法,是使用隨機數來解決很多計算問題的方法。將所求解的問題同一定的概率模型相聯絡,用電子計算機實現統計模擬或抽樣,以獲得問題的近似解。為象徵性地表明這一方法地概率統計特徵,故借用賭城蒙特卡羅命名。...