蒙特卡罗方法
随机数与随机变量的生成及在数值计算中的应用
- 用随机(统计)模拟方法解决实际问题时,首先要解决的是随机数的产生方法,或者称随机变量的抽样方法。即如何从具有已知分布的总体中抽取简单子样,这在蒙特卡罗方法中占有非常重要的地位。
- 在连续型随机变量的分布中,最简单而且最基本的分布是[0,1]上的均匀分布,也称为单位均匀分布。从该分布抽取的简单子样,称为随机数序列,其中每一个体成为随机数。
- 由于随机数在蒙特卡罗方法中占有极其重要的位置,我们用专门的符号ξ表示。由随机数序列的定义可知ξ1,ξ2,··· 是相互独立且服从单位均匀分布的随机数序列。也就是说,独立性,均匀性是随机数必备的两个特点。
- 计算机方法:给定一个种子,根据递推公式计算整个随机数序列。由于给定初始值和递推公式后整个序列就被唯一确定了,因此利用计算机方法生成的随机数序列称为伪随机数。
- 在计算机上利用数学方法产生随机数的第一个随机数发生器是20世纪40年代出现的“平方取中法”;以后又出现“乘积取中法”、位移法、线性同余法,组合同余法、反馈位移寄存器方法等等。目前较流行的也是多数统计学家认为较好的随机数发生器为后三种。
- 乘同余方法是由Lehmer在1951年提出来的,它的一般形式是:对于任一初始值的X1(称为随机数种子),伪随机数序列由下面递推公式确定:
import numpy as np
N=10000
seed=123456789
M=2**32
a=513
randnum=np.zeros(N)
X=np.zeros(N)
X[0]=seed
for i in np.arange(1,N)
X[i]=a*X[i-1]%M
randnum=X/M
import numpy as np
l,d,N,m=1,2,10000000,0
x=np.random.uniform(0,1,N)
p=np.random.uniform(0,np.pi,N)
for i in np.arange(N):
if x[i]<0.5*np.sin(p[i]):
m=m+1
pi_=N/m
PS:来源于天津财经大学统计学院