【Python蒙特卡罗法计算圆周率】

蒙特卡罗法计算圆周率

今天遇到一个很有意思的方法求解圆周率,给大家分享一下!

理论基础

蒙特卡罗法也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。是按抽样调查法求取统计值来推定未知特性量的计算方法。蒙特卡罗是摩纳哥的著名赌城,该法为表明其随机抽样的本质而命名。故适用于对离散系统进行计算仿真试验。在计算仿真中,通过构造一个和系统性能相近似的概率模型,并在数字计算机上进行随机试验,可以模拟系统的随机特性。

基本步骤

随机向如图所示的单位正方形和圆结构,抛洒大量“飞镖”点,计算每个点到圆心的距离从而判断该点在圆内或者圆外,用圆内的点数除以总点数就是π/4值。随机点数量越大,越充分覆盖整个图形,计算得到的π值越精确。实际上,这个方法的思想是利用离散点值表示图形的面积,通过面积比例来求解π值。

【Python蒙特卡罗法计算圆周率】_第1张图片

代码

from random import random
from math import sqrt
from time import process_time
DARTS = 10000#通过不断增加拋点,值越接近
hits = 0.0
for i in range(1, DARTS+1):
    x, y = random(), random()
    dist = sqrt(x ** 2 + y ** 2)
    if dist <= 1.0:
        hits = hits + 1
pi = 4 * (hits/DARTS)
print("Pi值是{:.5f}".format(pi))
print("运行时间是: {:.5f}s".format(process_time()))

运行结果

通过不断增加DARTS的值,π的值越精确

DARTS = 10000

 DARTS = 100000

DARTS = 1000000

DARTS = 10000000

 DARTS = 100000000

 DARTS = 1000000000

 大家有时间可以自己试一下

你可能感兴趣的:(#,Python练习题,python)