深度实践OpenStack:基于Python的OpenStack组件开发—3.5 例子:用蒙特卡洛算法计算圆周率
3.5 例子:用蒙特卡洛算法计算圆周率
本节将通过一个例子综合演示PyTorch的科学计算。我们将利用PyTorch的Tensor类,使用蒙特卡洛(Monte Carlo)算法,计算圆周率的数值。
3.5.1 随机计算与蒙特卡洛算法
随机计算是科学计算中的一种常用方法。对于确定性问题,为了获得数值解,也可以使用随机化方法来求解。
随机计算主要包括以下几类算法。
* 蒙特卡洛(Monte Carlo)算法:蒙特卡洛算法在相对确定的时间里获得可能不完全正确的结果。但是,从概率上看,运行时间越长,获得的结果越可能正确,或和正确值越接近。
* 拉斯维加斯(Las Vegas)算法:拉斯维加斯算法总是能获得正确的结果,但是运行时间不确定。
* 大西洋城(Atlantic City)算法:在正确率一定的情况下,运行时间不确定。
在这3种算法中,蒙特卡洛算法总是很快,但只是可能正确;拉斯维加斯算法总是正确,但只是可能会快;大西洋城算法只是可能正确,也可能会快。(注:这几种算法的名称都和赌—博有关。蒙特卡洛是欧洲小国摩纳哥最大的赌场,拉斯维加斯则是美国西海岸著名的赌城,大西洋城是美国东海岸的赌城。)
在本节中,我们将利用蒙特卡洛算法计算圆周率。使用蒙特卡洛计算圆周率的思路如下:我们知道,对于半径为的圆,其面积为。在直角坐标系中,考虑圆心在原点、半径为1的圆在第一象限的部分(见图3-2),这部分的面积为。如果在第一象限中的区域以等概率随机生成一个点,那么这个点落在圆里的概率是。如果在这个区域里撒上很多点,那么落在圆里的点和所有点的比大概就是。(在数学上可以证明,这个比例服从二项分布。对于个样点,其比例为的概率为
其均值为,方差为。随着越来越大,方差越来越小。当然,由于比例是有理数,是无理数,比例永远不可能等于。)
- 点赞
- 收藏
- 关注作者
评论(0)