用蒙特卡罗方法实现圆周率的计算
要求(以下分析结果要在实验报告上体现):
- 根据所得到PI值的精确度(前后两次PI值的差,小于0.0001)来确定是否终止实验。
- 对比不同精确度(0.01, 0.001, 0.0001, 0.00001, 0.000001)要求下,DARTS的数值。
- 用while循环来实现(记录代码或者代码截图)。
- 在精确度为0.01的实验里,记录前100次的PI值,观察PI值的差异。
1.1
对比不同精确度(0.01, 0.001, 0.0001, 0.00001, 0.000001)要求下,DARTS的数值。
精确度为0.01时
from random import random
from math import sqrt
import time
DARTS=1000
acc=0.01
PI=0
for a in range(100):
while 1:
pi=0
hits=0
i=1
while 1<=i<DARTS+1:
x,y=random(),random()
dist=sqrt(x**2+y**2)
if dist<=1.0:
hits=hits+1
i+=1
pi=4*(hits/DARTS)
if abs(pi-PI)>acc:
PI=pi
DARTS+=1
else:
break
print("精确度={},PI={},DARTS={}".format(acc,PI,DARTS))
精确度为0.001时
把acc=0.01改为acc=0.001即可
1.2
在精确度为0.01的实验里,记录前100次的PI值,观察PI值的差异
from random import random
from math import sqrt
import time
DARTS=3000
acc=0.01
PI=3.141592653589793
for b in range(100):
while 1:
pi=0
hits=0
i=1
while 1<=i<DARTS+1:
x,y=random(),random()
dist=sqrt(x**2+y**2)
if dist<=1.0:
hits=hits+1
i+=1
pi=4*(hits/DARTS)
if abs(pi-PI)>acc:
PI=pi
else:
break
print("PI({})值是{}".format(b,PI),end='')