蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。
下面我们使用蒙特卡洛方法计算圆周率:
具体是,首先在一个x,y坐标系内,划分一个实际大小的正方形,然后假定向这个正方形里面洒黄豆,然后我们根据这个正方形的某一个点为圆心,画一个四分之一圆,进而利用数学方法,计算落在这个扇形里面的黄豆数量,和正方形里面的黄豆数量,然后根据数学关系即可计算出圆周率的值。自然地,这个正方形越大,往里面投的黄豆数量越多,越接近于实际的圆周率.
我们用计算思维来理解这件事,洒黄豆的行为我们可以借助于随机数来实现,然后我们给出代码:
#实例六:蒙特卡罗圆周率计算
from random import random
from time import perf_counter
darts = 1000 * 1000 #虚拟一个1000*1000的正方形
hit = 0.0
start = perf_counter()
for i in range(1,darts+1):
x,y = random(),random()
dist = pow(x**2+y**2,0.5)#计算点x,y到圆心的距离
if dist <= 1.0:
hit = hit +1
pi = 4 * (hit/darts)
print("圆周率是:{}".format(pi))
end = perf_counter() - start
print("运行时间是:{:.2f}S".format(end))
这里,我们假定这个正方形的规格是1000*1000,我们可以让这个面积更大,这样我们计算出的圆周率也就越准确