tft每日頭條

 > 生活

 > 如何用python計算圓周率的近似值

如何用python計算圓周率的近似值

生活 更新时间:2024-08-17 10:12:00
微實踐 - 發現圓周率

本書同名免費MOOC《Python編程基礎及應用》在哔哩哔哩(B站)熱播,作者帶着你學。

版權聲明:本文内容引用自作者的圖書《Python編程基礎及應用》(高等教育出版社)。本文可以在互聯網上轉載傳播,但必須包含文中的版權聲明;本文不可以以紙質出版為目的進行摘抄或改編。

在曆史的長河裡,從古至今的數學家們嘗試了無數種計算圓周率的方法。 其中,法國數學家布馮(1707-1788)和拉普拉斯(1749-1827)提出的方法比較有趣。

如何用python計算圓周率的近似值(使用投點法計算圓周率)1

在邊長為2的正方形内有一個直徑為2半徑為1的内切圓。根據圓的面積公式,内切圓的面積 s = πr2 ,由于r=1,所以π = 内切圓的面積。邊長為2的正方形面積為4。在已知正方形的面積為4的情況下,如何求得内切圓的面積呢? 布馮提出了投針的方法。假設10000根針“均勻随機”地垂直落在正方形上,每根針在正方形上形成一個“投點”。那麼落入圓内的投點數量與圓的面積正相關:

如何用python計算圓周率的近似值(使用投點法計算圓周率)2

簡單推導,可得:

如何用python計算圓周率的近似值(使用投點法計算圓周率)3

假設有8000根針落在了圓内,其餘的2000根落在了圓外。此時,内切圓面積 ≈ 4 x 8000 / 10000 = 4 x 0.8 = 3.2,即圓周率π ≈ 3.2。

下述代碼模拟了将數量衆多的針投射到正方形,然後通過估算内切圓面積求得π的過程。

#picalc.py import random #随機數模塊 N,nHits = 10000,0 #總投點數,圓内投點數 xs,ys = [],[] #投點的x,y坐标列表 for i in range(N): #N次投點 x = random.random()*2-1 #随機數取投點坐标 y = random.random()*2-1 xs.append(x) #投點坐标存入列表 ys.append(y) if x*x y*y <= 1: #投點位于内切圓内 nHits = 1 #圓内投點數 1 pi = 4*nHits/N #通過計算圓面積估算圓周率 print("pi =",pi) import matplotlib.pyplot as plt #繪圖展現投點落在正方形/圓内的情況 from matplotlib.patches import Circle fig = plt.figure(figsize=(6,6)) plt.plot(xs, ys,'o', color='black', markersize = 1) c = Circle(xy=(0,0), radius=1, alpha=0.4, color="black") plt.gca().add_patch(c) plt.show()

執行結果

pi = 3.1908

注:因為随機數的參數,讀者執行的結果很可能會不同。

代碼說明

  • - N = 10000規定了投針的總次數;通過for循環,将投針N次。
  • - random.random()返回取值區間為0-1的均勻分布的随機數;random.random()*2-1得到取值區間為-1到 1的随機數。
  • - 循環内的x,y通過随機數取值,(x,y)代表了本次投針的落點坐标。每次投完針,都把坐标x,y存入對應的列表xs,ys,用于後續繪圖。
  • - x*x y*y <= 1用于判斷針的落點是否在内切圓内。這裡事實上應用了點到原點的距離公式,當落點距離原點的距離不大于1時,說明該落點位于圓内,圓内投點數nHits增加1。這裡需要注意,求點到原點的距離并沒有進行開平方運算,因為不必要。
  • - pi = 4 * nHits / N 應用前述推導公式計算内切圓的面積,也就是圓周率。

代碼的後續部分使用matplotlib繪圖庫描繪了落針在正方形/圓形内形成的投點情況,如後圖。程序的運行需要安裝matplotlib庫,其安裝方法詳見本書第14章。讀者也可以先注釋掉繪圖相關的代碼,這部分代碼隻管繪圖,不影響前述投針估計過程。

如何用python計算圓周率的近似值(使用投點法計算圓周率)4

讀者可能還覺得上述圓周率的估計值3.1908不夠準确。請修改N值,增加投針數量,再試一試。

本文節選高等教育出版社,《Pyton編程基礎及應用》:

如何用python計算圓周率的近似值(使用投點法計算圓周率)5

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved