Scratch & Math: 歡樂派(二)

雖然說太陽底下沒有新鮮事,但是有人聽說過用擲飛鏢來計算圓周率?這一章裡我們就來好好研究一下,擲飛鏢和圓周率之間的關係。

數學關鍵字: 圓周率。

數學家:馮•紐曼、烏接姆。

程式關鍵字: 蒙地卡羅方法。

Scratch程式:

擲飛鏢算圓面積和圓周率

擲飛鏢的遊戲時將一支飛鏢擲到圓盤上就算得分,應用這種擲飛鏢的概念可以算出圓面積和圓周率。

想像有一個正方形,正方形裡面有一個貼緊正方形四邊的圓形。我們對這個圖形不斷擲出飛鏢,每一支飛鏢都會在圖形上打點。所有的點都會打在正方形內,但是再細分的話可以看到有些點會打在圓內,有些則會打在圓外。在擲飛鏢的過程中我們並不刻意瞄準那一個區域,所以大概會得到一個均勻的打點分佈。

擲的飛鏢數目夠多的話,我們可以統計一下圓形的點數。以上圖為例,總共有900個點打在正方形內,而打在圓形內的點有709個。由於打點大致呈現均勻分佈,我們可以估算圓形面積和正方形面積的比值會等於打在圓形內的點數除以打在正方形內的點數。

假設正方形的面積為1,在這個例子裡可以估算出圓形的面積為0.8054,

已知半徑為 r 則圓面積等於 πr²,在上圖中圓形的直徑等於正方形邊長為1,因此圓形半徑為0.5。有了這些數據我們可以計算出圓周率 π,

擲飛鏢計算圓面積的過程中,最重要的是利用了飛鏢打點隨機均勻分佈的特性,這是一種機率統計的方法,在數學裡被稱為蒙地卡羅方法。

觀念平台:蒙地卡羅方法(Monte Carlo method)
蒙地卡羅方法利用大量重複的隨機取樣來估算出數值結果,一般認為蒙地卡羅方法是在1949年由著名數學家馮•紐曼和烏接姆在美國研究核武計劃時提出,由於保密的關係,同時基於隨機取樣的特性而以摩洛哥著名的蒙地卡羅賭城為這種計算方法命名。
隨著電腦計算能力的增強,需要大量數值隨機取樣的蒙地卡羅方法開始被廣泛應用在解決物理或數學問題。在用蒙地卡羅方法計算圓周率時,隨機點取得越多時,得到的結果會越趨近圓周率。但是用電腦以蒙地卡羅方法計算圓周率有一些限制,比如說電腦在平面打點的動作其實是將平面分割成一個個微小的網格,在空間上是不連續的,因此計算出來的圓周率值會有些誤差。

動手做5–3 蒙地卡羅方法求圓周率

[程式設計需求規格]

應用蒙地卡羅方法,設定距離條件在規劃好的正方形和內接圓形隨機打點,計算圓面積和正方形面積的比值,然後推導出圓周率。

[程式設計角色和舞台]

在這個程式裡有四個黑點造型的角色,舞台維持空白即可。

[程式設計解決方案]

[程式檢視]

當程式開始執行,變數在方形內就開始累加,代表了全部的隨機取樣的樣本數。當點打在圓形內會累加變數在圓形內,變數在圓形內的值會小於變數在方形內的值。顯示在舞台的圓周率值會在3.2左右的數值跳動。

在舞台上打點的位置都是在給定座標的微小格線上,格線越細小,則打點的分佈會越均勻。我們在程式[黑點5–3.1]中使用了非常小的單位格線10100來做蒙地卡羅的隨機取樣計算,

在這種單位格線設定下,當樣本數夠大時,計算出的圓周率值會在3.141左右。

可以略微條改方塊指令,將最小單位格線設為1,

和先前的設定比較這是一種較粗的格線設定值,因此打點的分佈的均勻度會下降,在樣本數夠大時,計算出的圓周率值在3.123左右,具有較大的誤差。

程式[黑點5–3.1]中的變數「方程式」用來判斷點是否打在圓形內。圓形的定義就是圓上任一點(x, y)到圓心(0, 0)的距離等於圓半徑,套用畢氏定理可以寫出這個關係式,

在程式中圓半徑為180,因此上式可以化簡為,也就是圓形在二維卡氏座標上的方程式,

打點的位置如果在圓形內,代表打點座標(x, y)到圓心(0, 0)的距離小於圓半徑,

同理,打點的位置如果在圓形外,代表打點座標(x, y)到圓心(0, 0)的距離大於圓半徑,

有了這樣的概念,我們可以將數學方程式轉換為scratch程式方塊,

按下小綠旗,就可以開始用擲飛鏢的方法計算出圓周率。

事實上,置換不同的變數「方程式」會畫出不同的圖形,例如我們將方程式設為,

轉換為相對應的scratch程式方塊,

可以畫出像海星一樣的圖形,蒙地卡羅方法同樣可以估算海星形狀的面積,

延伸閱讀:

Scratch & Math: 天花板上的蜘蛛(一) Scratch & Math: 天花板上的蜘蛛(二)

Scratch & Math: 直線裡的宇宙觀(一) Scratch & Math: 直線裡的宇宙觀(二)

Scratch & Math: 不能說的祕密(一) Scratch & Math: 不能說的祕密(二)

Scratch & Math: 無理的道理(一) Scratch & Math: 無理的道理(二) Scratch & Math: 無理的道理(三)

Scratch & Math: 歡樂派(一) Scratch & Math: 歡樂派(二)

Scratch & Math: 歡樂派(三) Scratch & Math: 歡樂派(四)

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.