蒙特卡罗方法于20世纪40年代美国在第二次世界大战中研制原子弹的“曼哈顿计划”计划的成员S.M.乌拉姆和J.冯·诺伊曼首先提出。数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。在这之前,蒙特卡罗方法就已经存在。1777年,法国数学家布丰(Georges Louis Leclere de Buffon,1707—1788)提出用投针实验的方法求圆周率π。这被认为是蒙特卡罗方法的起源。
基本思想就是大量实验,模拟概率
单位圆的面积是PI,单位圆的外切正方形面积是4
所以,1/4个圆的面积是PI/4,外切正方形的面积是1
而1/4圆的面积/单位正方形的面积就是PI/4
所以
#蒙特卡罗方法计算圆周率
import random,math,time
start_time = time.perf_counter()
s = 1000*1000
hits = 0
for i in range(s):
x = random.random()
y = random.random()
z = math.sqrt(x**2+y**2)
if z<=1:
hits +=1
PI = 4*(hits/s)
print(PI)
end_time = time.perf_counter()
print("{:.2f}S".format(end_time-start_time))
--------------------------------------------------------
3.14134
0.59S
通过多次撒点,模拟概率,求面积,而是否在圆内,可以通过到圆心的距离求解,利用计算机的运算速度,可以很快求出,即使1000万次,也只需要6秒左右