1. 程式人生 > 實用技巧 >027 例項6-圓周率的計算

027 例項6-圓周率的計算

目錄

一、"圓周率的計算"問題分析

圓周率的近似計算公式

π=k=0[116k(48k+128k+418k+518k+6)]π=∑k=0∞[116k(48k+1−28k+4−18k+5−18k+6)]

1.1 蒙特卡羅方法

二、"圓周率的計算"例項講解

圓周率的近似計算公式

π=k=0[116k(48k+128k+418k+51
8k+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 計算問題的擴充套件

  • 不求解圓周率,而是某個特定圖形的面積
  • 在工程計算中尋找蒙特卡羅方法的應用場景