蒙特卡羅(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()
效果圖
import numpy as np
import matplotlib.pyplot as plt
'''蒙特卡羅方法求函式 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...
蒙特卡羅方法
概念 蒙特卡羅方法又稱統計模擬法 隨機抽樣技術 是一種隨機模擬方法,以概率和統計理論方法為基礎的一種計算方法,是使用隨機數來解決很多計算問題的方法。將所求解的問題同一定的概率模型相聯絡,用電子計算機實現統計模擬或抽樣,以獲得問題的近似解。為象徵性地表明這一方法地概率統計特徵,故借用賭城蒙特卡羅命名。...