四、程序的控制结构
4.5 实例6:圆周率的计算
"圆周率的计算"问题分析
圆周率的近似计算公式
#CalPiV1.py
pi = 0
N = 100
for k in range(N):
pi += 1/pow(16, k)*(4/(8*k+1) - 2/(8*k+4) - 1/(8*k+5) - 1/(8*k+6))
print("圆周率值是:{}".format(pi))
>>> 圆周率值是:3.141592653589793
蒙特卡洛方法
[图片上传失败...(image-d0eb23-1584464989276)
#CalPiV2.py
from random import random
from time import perf_counter
DARTS = 1000*1000
hits = 0.0
start = perf_counter()
for i in range(1, DARTS+1):
x, y = random(), random()
dist = pow(x ** 2 + y ** 2, 0.5)
if dist <= 1.0:
hits = hits + 1
pi = 4 * (hits/DARTS)
print("圆周率值是:{}".format(pi))
print("运行时间是:{:.5f}s".format(perf_counter() - start))
>>>
圆周率值是:3.142364
运行时间是:0.75162s
举一反三
理解方法思维
- 数学思维:找到公式,利用公式求解
- 计算思维:抽象一种过程,用计算机自动化求解
- 谁更准确?
程序运行时间分析
- 使用time库的计时方法获得程序运行时间
- 改变撒点数量,理解程序运行时间的分布
- 初步掌握简单的程序性能分析方法
计算问题的扩展
- 不求解圆周率,而是某个特定图像的面积
- 在工程计算中寻找蒙特卡洛方法的应用场景
网友评论