圆周率的计算:
首先用基本公式求解:
程序为:
#精确圆周率
pi=0
N=100
for k in range(N):
pi=pi+1/pow(16,k)(
4/(8k+1)-2/(8k+4)-
1/(8k+5)-1/(8*k+6))
print(“圆周率的值为:{}”.format(pi))
运行结果为3.141592653589793
下面我们考虑蒙特卡罗方法,思路为随机向一个边长为1的正方形内撒点,最终在正方形的内切圆内的点占正方形的比例即为pi/4。
代码如下:
#蒙特卡罗法计算圆周率
from random import random
from time import perf_counter
num=1000010000
hits=0.0
start=perf_counter()
for i in range(1,num+1):
x,y=random(),random()
dis=pow(x2+y2,0.5)
if dis<=1.0:
hits=hits+1
pi=4(hits/num)
print(“圆周率的值为:{}”.format(pi))
print(“运算时间为:{:.5f}s”.format(perf_counter()-start))
num试了两个值,分别为10001000与1000010000。
三段代码运行结果如下:
可以看出,尝试的次数多不一定会更加精确,即是一个随机的结果,不能肯定,但是当数目逐渐趋于无穷大时,会向精确值不断接近。
也可以告诉我们,如果想考虑近似值,我们可以利用计算机强大的计算功能去模拟,不一定一定需要数学思维求解。