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

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

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

python用bbp公式求圆周率_【数学】怎样用蒙特卡罗方法求解圆周率_第2张图片
蒙特卡罗方法求解圆周率模拟https://www.zhihu.com/video/1222253758786260992

一、蒙特卡罗方法

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

假设有一个圆,

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

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

模拟方法

通过上述公式,转换得

其中,

  • 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

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

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

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

你可能感兴趣的:(python用bbp公式求圆周率_【数学】怎样用蒙特卡罗方法求解圆周率)