蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是指使用随机数(或伪随机数)来解决计算问题的方法.
求定积分
求已知函数 f ( x ) f(x) f(x) 在区间 [ a , b ] [a,b] [a,b] 内的定积分: ∫ a b f ( x ) d x \int_a^b f(x) \text{d} x ∫abf(x)dx.
当然现在有很多数值积分方法可用,像欧拉积分、4阶龙哥库塔积分等. 但这里介绍一下用蒙特卡洛方法来求积分.
积分可以转换成求期望的形式:
∫
a
b
f
(
x
)
d
x
=
∫
a
b
f
(
x
)
g
(
x
)
g
(
x
)
d
x
=
E
x
∼
g
(
x
)
[
f
(
x
)
g
(
x
)
]
\int_a^b f(x) \text{d} x = \int_a^b \frac{f(x)}{g(x)} g(x) \text{d} x = E_{x\sim g(x)} \left[\frac{f(x)}{g(x)}\right]
∫abf(x)dx=∫abg(x)f(x)g(x)dx=Ex∼g(x)[g(x)f(x)]
这里假设 g ( x ) g(x) g(x) 是区间 [ a , b ] [a,b] [a,b] 上的概率密度函数,我们可以在该分布下采样得到 x i , i = 1 , … , N x_i, i=1,\ldots,N xi,i=1,…,N. 因此
E x ∼ g ( x ) [ f ( x ) g ( x ) ] ≃ 1 N ∑ i = 1 N f ( x i ) g ( x i ) E_{x\sim g(x)} \left[\frac{f(x)}{g(x)}\right] \simeq \frac{1}{N}\sum_{i=1}^N \frac{f(x_i)}{g(x_i)} Ex∼g(x)[g(x)f(x)]≃N1i=1∑Ng(xi)f(xi)
通常,我们考虑
g
(
x
)
g(x)
g(x) 为简单的均匀分布,即
g
(
x
)
=
1
b
−
a
g(x) = \frac{1}{b-a}
g(x)=b−a1
所以用区间
[
a
,
b
]
[a,b]
[a,b] 均匀分布的随机数
x
i
x_i
xi 来求积分的方法为:
∫
a
b
f
(
x
)
d
x
≃
b
−
a
N
∑
i
=
1
N
f
(
x
i
)
\int_a^b f(x) \text{d} x \simeq \frac{b-a}{N}\sum_{i=1}^N f(x_i)
∫abf(x)dx≃Nb−ai=1∑Nf(xi)
用随机数求圆周率
一个典型的例子是用蒙特卡洛方法求圆周率 π \pi π.
π
\pi
π 等于单位元的面积,可以视为如下函数
f
f
f 在区间
[
−
1
,
1
]
×
[
−
1
,
1
]
[-1,1]\times [-1,1]
[−1,1]×[−1,1] 上的定积分:
f
(
x
,
y
)
=
{
1
,
x
2
+
y
2
<
1
,
0
,
otherwise
f(x,y) = \left\{ \begin{array}{ll} 1, & x^2+y^2 < 1,\\ 0, &\text{otherwise} \end{array}\right.
f(x,y)={1,0,x2+y2<1,otherwise
所以只需要在区间 [ − 1 , 1 ] × [ − 1 , 1 ] [-1,1]\times [-1,1] [−1,1]×[−1,1] 上随机取点 ( x i , y i ) (x_i,y_i) (xi,yi),并计算其函数值 f ( x i , y i ) f(x_i,y_i) f(xi,yi).
需要注意这里的均匀分布函数为:
g
(
x
,
y
)
=
1
4
g(x,y) = \frac{1}{4}
g(x,y)=41
最后求得:
π
≃
4
N
∑
i
=
1
N
f
(
x
i
,
y
i
)
\pi \simeq \frac{4}{N} \sum_{i=1}^N f(x_i,y_i)
π≃N4i=1∑Nf(xi,yi)