蒙特卡洛算法简单理解与demo

 

所谓蒙特卡洛算法,实际上就是用频率估计概率。

 

首先我们知道一个边长为2的正方形面积是2*2=4,他的内接圆的面积是π*1,那么我们在这样一个正方形内随机生成10000个点,落在圆里的点的个数/10000就应该是π/4,所以我们可以估计出π是落在圆里的点的个数*4/10000.

直接看程序:

 

import numpy as np

radius=1
test_num=100000
#random generate 10000 points in a sqare width is 2,and the center is in origin
sqare_x=2*np.random.random_sample(test_num)-1
sqare_y=2*np.random.random_sample(test_num)-1
incircle_point_num=0
#count how many points in the incircle
for point_count in range(len(sqare_x)):
    if(sqare_x[point_count]*sqare_x[point_count]+
               sqare_y[point_count]*sqare_y[point_count]<
               radius*radius):#judge if the distance lower than radius
        incircle_point_num+=1
print 'PI: '+str(4.0*incircle_point_num/test_num)


这里随机生成了10000个在边长为2,中心在原点的正方形中的点,根据坐标判断是否在内接圆内,

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值