蒙特卡洛方法

蒙特卡洛方法


首先从一个简单的例子入手,我们如何从概率的角度求得近似的PI?

一个不难理解的方法,我们向一个区域投球这个区域有个子区域,球落到子区域的概率是子区域与整个区域的比值。

由此,我们可以想到假设我们向一个边长为2的正方形区域投球,投到他最大内切圆的概率是(便于计算):圆的面积比上正方形面积在这个假设下的概率是PI/(2*2),由大数定律,我们都知道事情发生的频率随着事件规模n的增大无限接近事件的概率。由此我们可以不断的抛球,重复次数足够多后可以得到较为接近概率的频率,我们可以将这个频率看成概率带入公式即乘4就是所求的PI的近似值。基本java 代码如下:

double  n =sc.nextLong();
long count=0; 
x=Math.random()*2.0;
y=Math.random()*2.0;
if ( Math.pow(x-1,2)+ Math.pow(y-1,2)<=1)
		count ++;
System.out.println("PI="+String.format("%10f",4.0*count/n));

结果:

所谓蒙特卡洛方法的基本思想就是:当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。(百度百科)

基本上就是通过频率估计近似得到概率,根据概率的理论公式算出索要求的某个量。

所以蒙特卡洛的基本步骤:

1、构造概率描述步骤

例如上文例子中把求PI转化为投球的频率来描述投球概率

2、 实现从已知概率分布抽样

上文已知投球的点的坐标(x,y)随机取样(取0-2的随机数)

3、建立各种估计量

PI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值