蒙特卡洛法解π值

蒙特卡洛法解π值

#最近好多乱七八糟的东西搞得我很烦,于是写一篇文章缓解一下压力。
This is Constantine John Constantine. Asshole.
— — — — — — — — — — — —movie《Constantine》

正题

蒙特卡洛法是什么?
知乎上的摘抄:
蒙特卡罗算法基本思想

投针实验这个例子有点晦涩,换个简单的图文并茂的例子–求圆周率。计算圆周率时可以考虑将一个单位圆放在一个正方形中,从而将求解圆周率转化为计算出圆和正方形面积的比例。

蒙特卡洛法解π值_第1张图片

蒙特卡罗方法的基本思想是这样:假想你有一袋豆子,把豆子均匀地朝这个正方形上撒,然后数落在圆内的豆子数占正方形内豆子数的比例,即可计算出圆的面积,近而计算出π。而且当豆子越小,撒的越多的时候,结果就越精确。蒙特卡罗的理论依据是概率论中的大数定律。
#书上的介绍
蒙特卡洛法解π值_第2张图片

为了简化计算,一般用四分之一的图形求π值
具体如下

输入:抛点数
处理:计算每个点到圆心的距离,统计在圆内点的数量
输出:π值

下面是代码:

#蒙特卡洛法解π
#搞一个半径为1的1/4圆
from random import random    #random函数随机返回一个在【0,1)间的浮点数
from math import sqrt        #sqrt 是math库中用来开平方的
darts=1000                   #设定1000个“飞镖”
hits=0.0                     #初始击中个数
for i in range (1,darts+1):
    x,y=random(),random()    #用两个随机抛点(x,y)的坐标
    dist= sqrt(x*x+y*y)      #"飞镖"到靶心的距离
    if dist<=1.0:
        hits=hits+1          #假如飞镖飞到的地方恰在离圆1或1以内,个数+1
pi= 4*(hits/darts)           #循环结束后,在离圆心1以内的点数/所有飞镖数,
                             #因为设定的时候是1/4圆,所以还要乘四。
print(pi)

这可以说是按照自己理解的来解释的,如果有什么地方不正确,欢迎各位大佬前来斧正!
谢谢啦!
记于2021.5.12,一个我喜欢的日子。

你可能感兴趣的:(Python,python)