今天遇到一个很有意思的方法求解圆周率,给大家分享一下!
蒙特卡罗法也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。是按抽样调查法求取统计值来推定未知特性量的计算方法。蒙特卡罗是摩纳哥的著名赌城,该法为表明其随机抽样的本质而命名。故适用于对离散系统进行计算仿真试验。在计算仿真中,通过构造一个和系统性能相近似的概率模型,并在数字计算机上进行随机试验,可以模拟系统的随机特性。
随机向如图所示的单位正方形和圆结构,抛洒大量“飞镖”点,计算每个点到圆心的距离从而判断该点在圆内或者圆外,用圆内的点数除以总点数就是π/4值。随机点数量越大,越充分覆盖整个图形,计算得到的π值越精确。实际上,这个方法的思想是利用离散点值表示图形的面积,通过面积比例来求解π值。
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
大家有时间可以自己试一下