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