深度实践OpenStack:基于Python的OpenStack组件开发—3.5 例子:用蒙特卡洛算法计算圆周率

举报
华章计算机 发表于 2019/06/01 23:44:30 2019/06/01
【摘要】 本书摘自《深度实践OpenStack》,作者是喻涛,田亮,张家龙,赵利军,李飞。

3.5 例子:用蒙特卡洛算法计算圆周率

  本节将通过一个例子综合演示PyTorch的科学计算。我们将利用PyTorch的Tensor类,使用蒙特卡洛(Monte Carlo)算法,计算圆周率的数值。

3.5.1 随机计算与蒙特卡洛算法

  随机计算是科学计算中的一种常用方法。对于确定性问题,为了获得数值解,也可以使用随机化方法来求解。

  随机计算主要包括以下几类算法。

* 蒙特卡洛(Monte Carlo)算法:蒙特卡洛算法在相对确定的时间里获得可能不完全正确的结果。但是,从概率上看,运行时间越长,获得的结果越可能正确,或和正确值越接近。

* 拉斯维加斯(Las Vegas)算法:拉斯维加斯算法总是能获得正确的结果,但是运行时间不确定。

* 大西洋城(Atlantic City)算法:在正确率一定的情况下,运行时间不确定。

  在这3种算法中,蒙特卡洛算法总是很快,但只是可能正确;拉斯维加斯算法总是正确,但只是可能会快;大西洋城算法只是可能正确,也可能会快。(注:这几种算法的名称都和赌—博有关。蒙特卡洛是欧洲小国摩纳哥最大的赌场,拉斯维加斯则是美国西海岸著名的赌城,大西洋城是美国东海岸的赌城。)

  在本节中,我们将利用蒙特卡洛算法计算圆周率。使用蒙特卡洛计算圆周率的思路如下:我们知道,对于半径为的圆,其面积为。在直角坐标系中,考虑圆心在原点、半径为1的圆在第一象限的部分(见图3-2),这部分的面积为。如果在第一象限中的区域以等概率随机生成一个点,那么这个点落在圆里的概率是。如果在这个区域里撒上很多点,那么落在圆里的点和所有点的比大概就是。(在数学上可以证明,这个比例服从二项分布。对于个样点,其比例为的概率为

其均值为,方差为。随着越来越大,方差越来越小。当然,由于比例是有理数,是无理数,比例永远不可能等于。)


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。