其實蒙特卡洛方法的原理十分的簡單,本文主要從兩方面來解答上述問題,其一是蒙塔卡洛方法的原理,其二是列舉蒙特卡洛方法的具體應用。原理與應用相結合,以期能夠有一個更好的理解。
我們知道在實際生活中有很多事情都是隨機發生的,無論是在現實社會中還是在工程實踐中都存在大量的不確定性關係,這種不確定性關係在數學中可以被稱為隨機事件,描繪這種隨機事件發生的可能性大小的變數就稱之為機率。當我們遇到這種不確定性關係求解的時候(即求解隨機事件的機率的時候),可以透過某種實驗的方式,以某種事件發生的頻率值來代替這種事件發生的機率值。我們可以想象當我們做了大量的實驗的時候這個頻率值就會無限接近於事件發生的真實機率值。總之一句話,我理解的蒙特卡洛方法的精髓就是透過實驗的方法來用頻率代替機率。前人總結了蒙特卡洛方法工作的三個步驟,在這裡列些如下,以供參考:(1)構造或描述機率過程,(2)實現從已知機率分佈抽樣,(3)建立各種估計量。
蒙特卡洛方法在很多領域都有廣泛的應用,比如金融學、計算機科學、生物醫學等。在這裡我們舉一個簡單的小例子,來感受一下,蒙特卡洛方法工作的具體流程。
例子:估計圓周率pi的數值。
我們知道圓周率是比較難計算的,我們可以轉換一下思想,透過實驗的方法近似的估計一下pi的數值大小。如下圖所示是一個邊長為2的正方形內接了一個單位圓,單位圓的面積為pi*r^2=pi(r=1),正方形的面積為d^2=4。兩者的比值記為P,即P=pi/4,則pi=4P。我們需要做的就是通過蒙特卡洛方法來求得P的近似值,從而得出pi的近似值。可以想象現在我們手拿一把豆子,均勻隨機的撒向這個正方形的區域,那麼豆子落在每個點的機率都是相等的。只要數一下落在單位圓內的豆子有多少和落在整體正方形內的豆子有多少,兩者的比值就近似等於P(豆子足夠多的情況下)。這就是蒙特卡洛方法的具體實現。
筆者在python上模擬了上述過程,只不過在python上撒豆子的動作是透過在相應區域內生成隨機點(在正方形內一共生成了10^5個點)來完成的。
python程式碼連結如下:https://github.com/JXZe/learn/blob/master/pi/pi.py
實驗的結果如下:
近似的pi是 3.14712
其實蒙特卡洛方法的原理十分的簡單,本文主要從兩方面來解答上述問題,其一是蒙塔卡洛方法的原理,其二是列舉蒙特卡洛方法的具體應用。原理與應用相結合,以期能夠有一個更好的理解。
1.蒙特卡洛方法我們知道在實際生活中有很多事情都是隨機發生的,無論是在現實社會中還是在工程實踐中都存在大量的不確定性關係,這種不確定性關係在數學中可以被稱為隨機事件,描繪這種隨機事件發生的可能性大小的變數就稱之為機率。當我們遇到這種不確定性關係求解的時候(即求解隨機事件的機率的時候),可以透過某種實驗的方式,以某種事件發生的頻率值來代替這種事件發生的機率值。我們可以想象當我們做了大量的實驗的時候這個頻率值就會無限接近於事件發生的真實機率值。總之一句話,我理解的蒙特卡洛方法的精髓就是透過實驗的方法來用頻率代替機率。前人總結了蒙特卡洛方法工作的三個步驟,在這裡列些如下,以供參考:(1)構造或描述機率過程,(2)實現從已知機率分佈抽樣,(3)建立各種估計量。
2.應用舉例蒙特卡洛方法在很多領域都有廣泛的應用,比如金融學、計算機科學、生物醫學等。在這裡我們舉一個簡單的小例子,來感受一下,蒙特卡洛方法工作的具體流程。
例子:估計圓周率pi的數值。
我們知道圓周率是比較難計算的,我們可以轉換一下思想,透過實驗的方法近似的估計一下pi的數值大小。如下圖所示是一個邊長為2的正方形內接了一個單位圓,單位圓的面積為pi*r^2=pi(r=1),正方形的面積為d^2=4。兩者的比值記為P,即P=pi/4,則pi=4P。我們需要做的就是通過蒙特卡洛方法來求得P的近似值,從而得出pi的近似值。可以想象現在我們手拿一把豆子,均勻隨機的撒向這個正方形的區域,那麼豆子落在每個點的機率都是相等的。只要數一下落在單位圓內的豆子有多少和落在整體正方形內的豆子有多少,兩者的比值就近似等於P(豆子足夠多的情況下)。這就是蒙特卡洛方法的具體實現。
筆者在python上模擬了上述過程,只不過在python上撒豆子的動作是透過在相應區域內生成隨機點(在正方形內一共生成了10^5個點)來完成的。
python程式碼連結如下:https://github.com/JXZe/learn/blob/master/pi/pi.py
實驗的結果如下:
近似的pi是 3.14712