教你如何用 Python 執行蒙地卡羅方法,證明圓周率等於 3.1415926

【我們為什麼挑選這本書】歷代數學家皆想計算 π 值,解開圓周率的神秘面紗;其中一個數學家叫蒙地卡羅(Monte Carlo),他提出蒙地卡羅方法,藉由計算落在方形與圓形的點的數量比值,計算出圓周率。

你的第一本 Python 入門課》的作者毛雪濤和丁毓峰,都在武漢理工大學進行電腦的研究和教學,透過本書讓讀者了解 Python 的基礎技術。下文,我們將藉由 Python 執行蒙地卡羅方法,親自算出 π 值。(責任編輯:郭家宏)

「《科技報橘》徵才中!跟我們一起定位台灣產業創新力 >> 詳細職缺訊息
快將你的履歷自傳寄至 [email protected]

今天老師出了一個難題,要大家求圓周率 π 的值,可是什麼條件也沒有給。大家有的埋頭背圓周率,有的開始在紙上畫圓形,還有的拍著腦袋想辦法,小小(書中人物)也沒有什麼好的主意。

如何用蒙地卡羅方法(Monte Carlo method)算圓周率?

小小這幾天都在思考如何求 π 值,嘴裡嘮嘮叨叨,連最愛吃的蘋果派拿在手上都忘記吃了。同時,廚房裡的一位廚師也正在為一塊圓圓的披薩餅隨意地撒芝麻,聽到小小的嘮叨,廚師突然大叫:「我有辦法!」他拿出一個正方形的包裝盒,可以正好把一整塊圓圓的披薩放進去,就像圖 48.1 那樣。

假設披薩的半徑為 r,則盒子邊長為 2r。那麼,盒子面積為 2r × 2r = 4r^2,則這一整塊披薩的面積就是 πr^2。披薩面積與盒子的面積之比就是 πr^2 : 4r^2 = π : 4。

小小睜大了眼睛聽著,廚師繼續說:「如果我在披薩盒上空均勻地撒芝麻,芝麻就會隨機地落在披薩上和盒子的其他地方,如果芝麻撒得足夠多,鋪滿整個披薩和包裝盒,那麼落在披薩上的芝麻數量和處於整個方盒內的芝麻數量就近似地表示披薩的面積和盒子的面積!」

「嗯嗯嗯⋯⋯」小小點著頭,嘴巴已經張得老大合不攏了。廚師繼續說:「只要能數出落在披薩上的芝麻數和落在盒子裡總共的芝麻數,它們的比就可以近似等於圓和方形面積的比,也就是 π : 4。」說完,廚師微笑著抬起頭,然後又繼續低頭撒芝麻去了。

小小半天才回過神來,他半信半疑地問旁邊的店長:「那位廚師是誰?」「新來的麵點師,叫蒙地.卡羅。」「蒙地.卡羅⋯⋯真傻,那麼多芝麻怎麼數得清?」

用 Python 執行蒙地卡羅法,計算圓周率

新來的廚師令小小印象深刻,一連幾天,小小腦子裡都在「撒芝麻」。既然芝麻多得數也數不清,那是不是可以用電腦來幫忙呢?想著,小小打開電腦,創建了一個 Python 檔。把檔保存為 C:\Workspace\Chapter48\MonteCarlo.py,輸入以下程式碼:

該程式需要引入幾個模組函式:random 中的 random() 函式、time 中的 perf_counter() 函式和 math 中的 sqrt() 函式。

首先由使用者輸入需要產生的點數,相當於廚師撒的芝麻數。使用的點數越多,結果就越接近 π 值,當然計算所耗費的時間也越長。初始化函式 cnt,用於統計隨機落在圓內的點數。為簡化計算,使用 1/4 單位圓(半徑為 1)和包圍它的正方形(邊長為 1)的面積比來計算 π 值,如圖 48.1 所示。

先記錄一下當前時間,做為計算開始的時間。接下來使用一個 for 迴圈統計落在 1/4 圓內的點的數量。變數 x 和 y 是(0,1)之間的亂數,組成點的座標。變數 dis 為點到圓心的距離,如果 dis 小於等於 1,則計入圓內的點數。

最後,根據蒙地.卡羅的說法,圓內點數:方形內點數 = pi : 4,其中 pi 表示所求的 π。計算完畢後再次使用 perf_counter() 函式獲取當前準確時間,從而得出整個迴圈所耗費的時間。運行程式,分別使用不同數量級的點數來計算 pi 值,結果如圖 48.2 所示。

蒙地卡羅法求 π 值,如果點數規模為 5×108,則計算時間約為 478 秒,即 8 分鐘(視電腦性能有所不同),使用這個點數計算出來的 π 值相對精確。使用 Python 做完試驗,小小心裡更加佩服那位新來的廚師了,難道他真的是蒙地.卡羅?

(本文書摘內容出自《你的第一本 Python 入門課》,由 商業周刊 授權轉載,並同意 TechOrange 編寫導讀與修訂標題。首圖來源:Needpix CC Licensed。)

更多關於 Python 的技術

教你如何用 Python 的平行運算,驗證數學界的百年難題「哥德巴赫猜想」
【內附影片、程式碼】微軟工程大師開課啦!用 44 個短片讓你速成 Python 技能
只會用 Excel 還不夠!七大主題,教你如何用 Python 優化數據分析效能


醫學明日之星「細胞治療」,你聽過嗎?

這是一種讓人類細胞自我修復的神奇醫學技術! 搶先報名《2019 未來科技展》再生醫療場次 產官學三層維度概念拆解,細胞治療即將引爆的巨大商機與醫療創新趨勢 《點我即刻報名

點關鍵字看更多相關文章: