python用bbp公式求圆周率_【数学】怎样用蒙特卡罗方法求解圆周率

3009a95f52e4ad37a5c76a3526b2f024.png

蒙特卡罗方法是指用随机数通过求解概率而获得近似值的方法。而圆周率也可通过此法求解。

1bc8755f78c1e75c998dcf5c603e722c.png
蒙特卡罗方法求解圆周率模拟https://www.zhihu.com/video/1222253758786260992

一、蒙特卡罗方法

32f8204c860816897b4b791c713e1c90.png

假设有一个圆,

  • 半径:
  • 圆的面积:
  • 方的面积:

那么,圆在方里的概率为:

模拟方法

通过上述公式,转换得

其中,

  • m为圆内点的个数;
  • n为圆外点的个数。

需要检验某个点是否在圆内,可通过公式得知:

其中

二、蒙特卡罗模拟

2.1. 程序定义

变量

  • m:整数,落入圆内的点的个数
  • n:整数,落中圆外的点的个数
  • x:浮点数,居于(0,1)区间的随机数
  • y:浮点数,居于(0,1)敬意的随机数
  • r:浮点数,圆半径
  • :浮点数,圆周率

算法

如果某一点(x, y),并且x,y分别在区间(0, 1)内,满足

则在圆内,否则在圆外。

重复试验n次,求得圆周率有:

2.2. 模拟过程

用Python模拟的过程如下:

import math
import random


def simulator(n):
    n_in_a_circle = 0
    for i in range(n):
        # random.().random(): (0, 1)
        x = random.random()
        y = random.random()
        if math.sqrt(x*x + y*y) < 1:
            n_in_a_circle += 1
    return n_in_a_circle


def compute_pi(n_in_a_circle, n_in_a_square):
    return 4 * n_in_a_circle / n_in_a_square

求得结果:

n = 1000000
m = simulator(n)
pi = compute_pi(m, n)
print(pi)
----------------------------
3.141792

多次试验,圆周率随试验次数增多的变化规律如下:

d90a48b76466cbb2de76f39be2bfc371.png

4d57887aa5dd018ab4f14a5426bc949c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值