目錄
一、"圓周率的計算"問題分析
圓周率的近似計算公式
π=∑k=0∞[116k(48k+1−28k+4−18k+5−18k+6)]π=∑k=0∞[116k(48k+1−28k+4−18k+5−18k+6)]
1.1 蒙特卡羅方法
二、"圓周率的計算"實例講解
圓周率的近似計算公式
π=∑k=0∞[116k(48k+1−28k+4−18k+5−18k+6)]π=∑k=0∞[116k(48k+1−28k+4−18k+5−18k+6)]
# CalPiV1.py
pi = 0
N = 10
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.1333333333333333
圓周率值是: 3.1414224664224664
圓周率值是: 3.1415873903465816
圓周率值是: 3.1415924575674357
圓周率值是: 3.1415926454603365
圓周率值是: 3.141592653228088
圓周率值是: 3.141592653572881
圓周率值是: 3.141592653588973
圓周率值是: 3.1415926535897523
圓周率值是: 3.1415926535897913
2.1 蒙特卡羅方法
# 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.141148
運行時間是: 0.77535s
三、"圓周率的計算"舉一反三
3.1 理解方法思維
- 數學思維:找到公式,利用公式求解
- 計算思維:抽象一種過程,用計算機自動化求解
- 誰更准確? (不好說…)
3.2 程序運行時間分析
- 使用time庫的計時方法獲得程序運行時間
- 改變撒點數量,理解程序運行時間的分布
- 初步掌握簡單的程序性能分析方法
3.3 計算問題的擴展
- 不求解圓周率,而是某個特定圖形的面積
- 在工程計算中尋找蒙特卡羅方法的應用場景