用蒙特卡罗方法实现圆周率的计算

用蒙特卡罗方法实现圆周率的计算

要求(以下分析结果要在实验报告上体现):

  1. 根据所得到PI值的精确度(前后两次PI值的差,小于0.0001)来确定是否终止实验。
  2. 对比不同精确度(0.01, 0.001, 0.0001, 0.00001, 0.000001)要求下,DARTS的数值。
  3. 用while循环来实现(记录代码或者代码截图)。
  4. 在精确度为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='')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值