#python算法100天 DAY06--Monte Carlo method(蒙特卡罗算法)

蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。(百度百科)

这里我用蒙特卡罗算法来计算圆周率

方法是这样的,先规定一个1*1的正方形,在这个正方形里面切割出一个1/4的圆,假设我们有很多的点,让这些点随机的落到这个正方形里面,而又落到圆里面的点的概率是S(圆)/S(正方形)= Π/4。假设有n个点而有t个点落到圆里面,则Π/4=t/n,所以Π=(4*t)/n。

我们以圆心为原点,正方形的两个边为X,Y轴建立坐标系,那么在正方形里面的坐标范围就是(0,0)到(1,1)。现在只需要在这个坐标范围内模拟出很多个坐标,用落在这个圆内的坐标个数来表示落入圆中点的个数即可。

贴上代码:

#蒙特·卡罗方法计算圆周率
import numpy as np
def pi(n, batch=1000):#n 为在1*1的正方形中生成点的个数,batch 表示每次生成1000个坐标点
    t = 0
    for i in range(n // batch):
        ### 随机获取坐标

        p = np.random.rand(batch, 2)#通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1。np.random.rand()
        ### 计算坐标平方和
        p = (p * p).sum(axis=1)#将一个矩阵的每一行向量相加
        ### 平方和小于1的即为落在圆中的点
        t += (p <= 1).sum()

    return 4 * t / n#根据公式p = Π/4 = t/n

运行结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值