西安电子科技大学Python程序设计
上机实验——使用蒙特·卡罗法计算圆周率近似值
一、实验目的
(1) 理解蒙特·卡罗方法原理;
(2) 熟练使用内置函数input()接收用户输入;
(3) 熟练使用for循环控制循环次数;
(4) 理解for循环的本质与工作原理;
(5) 了解random模块中常用函数。
二、实验内容
编写程序,模拟蒙特卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值,结果保留小数点后8位有效数字。观察实验结果,将蒙特卡罗计算圆周率的近似值与圆周率近似值计算公式得出的结果进行比较,理解模拟次数增多越来越接近近似值的原因。
三、实验环境
Python3.6以上版本
四、实验原理和步骤
蒙特·卡罗方法又称统计实验法,是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中包括圆周率近似值的计算问题。假设有一块边长为2的正方形模板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在模板上(更多时候是落在单位圆内)。如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法。
五、实验要求
(1) 编程按照圆周率的近似计算公式输出圆周率近似值;
(2) 编程模拟蒙特卡罗计算圆周率近似值;
按照试验内容编写程序,完整的代码和运行结果记录在实验报告中,实验结束之后整理结果并提交电子版实验)报告。
import random
summation = 0
cnt = int(input("请输入掷飞镖的次数:"))
for i in range(cnt):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
if x ** 2 + y ** 2 <= 1:
summation += 1
pi1 = summation / cnt * 4
pi2 = 0
for k in range(100000):
pi2 += 16 ** (-k) * (4 / (8 * k + 1) - 2 / (8 * k + 4) - 1 / (8 * k + 5) - 1 / (8 * k + 6))
print(f'蒙特·卡罗法计算结果为:{
round(pi1, 8)}')
print(f'圆周率的近似计算公式结果为:{
round(pi2, 8)}')
print(f'误差为:{
round(abs(pi1 - pi2), 8)}')