您的位置:首页 > 其它

Monte Carlo method

2018-01-03 10:46 225 查看
Monte Carlo方法
       蒙特卡罗方法又称随机仿真方法或统计仿真方法,即利用随机数进行数值仿真的方法,属于计算数学的一个分支。
       该方法源于美国第二次世界大战时期进行的曼哈顿计划,其主要创始人是:Stanislaw Marcin Ulam,Enrico Fermi,John von Neumann和Nicholas Metropolis。其中Neumann应该是大家的老熟人了。
       Monte Carlo方法的思想并不新颖,人们很早在生产实践和科学实验中就已发现并利用了随机仿真的方法,下面拿一个著名的数学试验做例子。

       Buffon投针试验:



      1768年,法国数学家Comte de Buffon利用投针试验估计π的数值,就用到了Monte Carlo方法思想。
        


       如图,A∈[0,d) ,θ∈[0,π),随机向量可随机分布于区域[0,d)×[0,π)内,其位置服从概率密度函数 1/dπ。

       理论上,针与线相交的概率为

。则π=2l/dp≈2lN/dn,其中N为投针次数,n为针与平行线相交次数。1901年Lazzarini进行了3408次投针试验,估得的π值为3.1415929。

       如今也可利用程序来模拟该实验,附上Python代码:
# -*- coding: cp936 -*-
from __future__ import division
import random
import math

n = 100000
L = 0.5
d = 2
m = 0
for i in range(n):
alpha = round(random.random()*math.pi,3) #针与平行线的夹角
y = round(random.random()*d/2,3) #针中心距最近直线的距离
if y<=L/2*round(math.sin(alpha),3):
m += 1
print "针与平行线相交的频率为:" + str(m/n)
print "估得的圆周率为:"+ str(2*n*L/(m*d))
       Monte Carlo方法主要用在难以定量分析的概率模型,这种模型一般得不到解析的结果,或虽有解析解但计算代价过大以至不可算,也可用在算不出解析结果的定型模型中。
       用Monte Carlo方法解决问题,需要根据随机变量遵循的分布规律选出具体的值,即抽样。随机变量的抽样方法很多,不同的分布采用的方法不尽相同。在计算机上的各种分布的随机数实际上都是按照一定的确定方法产生的伪随机数。

Markov Chain Monte Carlo
       马尔科夫链蒙特卡罗方法(MCMC)是使用Markov链的蒙特卡罗积分,其基本思想是:构造一条Markov链,使其平稳分布为待估参数的后验分布,通过这条Markov链产生后验分布的样本,并基于Markov链达到平稳分布时的样本(有效样本)进行蒙特卡罗积分。

       基本步骤:1. 构造Markov链,使其收敛到平稳分布π(x)
       2. 产生样本:由样本空间中的某一点x0发出,用先前产生的Markov链进行抽样模拟,产生点序列:x1,x2,...,xn
       3. 蒙特卡罗积分:任一函数f(x)的期望估计为


       Markov链转移核的构造至关重要,不同的转移核构造方法将产生不同的MCMC方法。常用的转移核构造方法有吉布斯采样(Gibbs Sampling)Metropolis-Hastings抽样法

       简单介绍一下Gibbs Sampling:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  统计理论