之前有一篇文章( )提到了計算機用級數計算圓周率的幾個方法。
但是,計算圓周率不僅可以用割圓術、無窮級數等方法,還能用“概率法”。
所謂概率法,就是用概率統計的方法,其中的著名代表,就是蒙特卡洛算法。
蒙特卡洛算法是20世紀最偉大的算法之一,它是機器學習領域常用的方法,AlphaGo就採用了蒙特卡洛算法。
那麼,什麼是蒙特卡洛算法,它又有什麼神奇的療效呢?
蒙特卡洛算法
20世紀40年代,波蘭裔美國科學家烏拉姆在洛斯阿拉莫斯國家實驗室為核武器項目工作時,發明了現代版本的蒙特卡羅算法。
出於保密的需要,而烏拉姆的叔叔常在摩納哥的蒙特卡洛賭場輸錢,因此將其命名為“蒙特卡洛”。
它本質是一種概率統計法,即:
用大量的隨機樣本,以事件出現的概率作為問題的解。
比如,計算圓周率π的一種奇特治療方法。
π的計算
如圖1所示,顯然,圖中白色1/4圓與正方形的面積比為π/4。
那麼,
我們可以在正方形內隨機產生n個點,
換句話說,就是:
我們閉著眼睛,往這個正方形桌面上瞎扔n顆米粒。
通過計算這些點和原點的距離,可以判斷這些點是否在1/4圓內。
經過統計,如果落在1/4圓內的點的個數為a,那麼,
a/n就是我們隨機扔出去的點,落在圓內的測量概率。
那麼,可以有:
π/4 ≈ a/n
則,
π ≈ 4a/n;
這樣,我們可以把π當作一個未知數求出來。
隨機模擬30000個點,則π的估算值與真實值相差僅為0.07%,如圖2。
這也可以喔,簡直機智得不像實力派。
不足
當然,它也有不足之處。
當隨機點取得越多時,其結果似乎並不會越來越精確。即使取10⁹個隨機點,其結果也僅在前4位與圓周率吻合。
這有多方面的原因,比如,計算機產生的隨機數是受存儲格式的限制的,是離散的,並不能產生連續的任意實數。
但是,對於那些計算過於複雜而難以得到解析解,或者根本沒有解析解的問題,它是一種有效的數值解法。
閱讀更多 王珂 的文章