虽然在python的math库中存在着圆周率的表示,但是在实际生活中又有谁可以完整的背出圆周率呢,圆周率又是怎样被计算出来的呢?
首先数学家们发现了圆周率的近似方程如下:
而这段代码自然可以用计算机中的python高效的表现出来,正如示例一:
pi = 0
N = 100
for k in range(N):
pi += 1/pow(16,k)*(\
4/(8*k+1) - 2/(8*k+4)-\
1/(8*k+5) - 1/(8*k+6))
print('圆周率值是:{}'.format(pi))
自然获得结果:
圆周率值是:3.141592653589793
而在工程上采用的是一种近似的方法,即蒙特·卡罗方法。
蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。
通过一个四分之一的圆和边长等于圆半径的正方形,随机在该图形上撒下‘小点’,最终通过圆内的’小点‘与圆外的’小点‘进行简单运算得出pi的取值。
源代码经过改进得到如下示例二:
#蒙特卡罗方法
from random import random #梅森旋转算法
from time import perf_counter
DARTS = 1000*1000
hits = 0.0
start = perf_counter()
for i in range(1,DARTS+1):
x,y = random(),random()
dist = pow(x**2+y**2,0.5)
if dist <= 1.0:
hits = hits + 1
pi = 4 * (hits/DARTS)
print('圆周率值是:{}'.format(pi))
print('运行时间是:{:.5f}s'.format(perf_counter()-start))
从而得到结果:
圆周率值是:3.143688
运行时间是:1.44904s
这样得到的结果也较为近似。