基本原理
蒙特卡羅方法通過抓住事物運動的幾何數量和幾何特征,利用數字方法來加以模擬,即進行一種數字模擬實驗。它是以一個概率模型為基礎,按照這個模型所描繪的過程,通過模擬實驗的結果,作為問題的近似解。
主要步驟如下:
1.構造或描述概率過程
2.實現從已知概率分布抽樣
3.建立各種估計量
示例一:π值的計算
import
numpy
as
np
import
pandas
as
pd
import
matplotlib
.
pyplot
as
plt
%
matplotlib inline
# π的計算
n
=
30000
r
=
1.0
#半徑
a
,
b
=
(
0.0
,
0.0
)
#圓心
xmin
,
xmax
=
a
-
r
,
a
+
r
ymin
,
ymax
=
b
-
r
,
b
+
r
x
=
np
.
random
.
uniform
(
xmin
,
xmax
,
n
)
y
=
np
.
random
.
uniform
(
ymin
,
ymax
,
n
)
fig
=
plt
.
figure
(
figsize
=
(
6
,
6
)
)
axes
=
fig
.
add_subplot
(
1
,
1
,
1
)
plt
.
plot
(
x
,
y
,
'ro'
,
markersize
=
1
)
plt
.
axis
(
'equal'
)
d
=
np
.
sqrt
(
(
x
-
a
)
**
2
+
(
y
-
b
)
**
2
)
res
=
sum
(
np
.
where
(
d
<
r
,
1
,
0
)
)
print
(
'落在圓內的點有%i個'
%
res
)
pi
=
4
*
res
/
n
print
(
"π的近似值為:"
,
pi
)
#繪制圓形
from
matplotlib
.
patches
import
Circle
circle
=
Circle
(
xy
=
(
a
,
b
)
,
radius
=
r
,
alpha
=
0.5
,
color
=
'r'
)
axes
.
add_patch
(
circle
)
plt
.
grid
(
True
,
linestyle
=
'--'
,
linewidth
=
'0.5'
)
plt
.
show
(
)
示例二:計算積分y=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
def
f
(
x
)
:
return
x
**
2
#統計落在函數y=x^2圖像下方的點的數目
res
=
sum
(
np
.
where
(
y
<
f
(
x
)
,
1
,
0
)
)
#計算定積分的近似值
integral
=
res
/
n
print
(
'integral:'
,
integral
)
#繪制散點圖
fig
=
plt
.
figure
(
figsize
=
(
6
,
6
)
)
axes
=
fig
.
add_subplot
(
1
,
1
,
1
)
axes
.
plot
(
x
,
y
,
'ro'
,
markersize
=
1
)
plt
.
axis
(
'equal'
)
#繪制y=x^2面積圖
xi
=
np
.
linspace
(
0
,
1
,
100
)
yi
=
xi
**
2
plt
.
plot
(
xi
,
yi
,
'--k'
)
plt
.
fill_between
(
xi
,
yi
,
0
,
color
=
'r'
,
alpha
=
0.5
,
label
=
'area'
)
plt
.
grid
(
)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
