蒙特卡洛演算法

2021-08-07 10:57:29 字數 3055 閱讀 9299

從今天開始要研究sampling methods,主要是mcmc演算法

contents

1. 蒙特卡洛介紹

2. 蒙特卡洛的應用

3. 蒙特卡洛積分

1. 蒙特卡洛介紹

蒙特卡羅方法(monte carlo method),也稱統計模擬方法,是二十世紀四十年代中期由於科學技術的

發展和電子計算機的發明,而被提出的一種以概率統計理論為指導的一類非常重要的數值計算方法。是指使 用

隨機數(或偽隨機數)來解決很多計算問題的方法。與它對應的是確定性演算法。蒙特卡羅方法在

金融工程

學,巨集觀經濟學,計算物理學(如粒子輸運計算、量子熱力學計算、空氣動力學計算)等領域應用廣泛。

蒙特卡羅方法於20世紀40年代美國在第二次世界大戰中研製原子彈的「曼哈頓計畫」計畫的成員s.m.烏拉姆

和j.馮·諾伊曼首先提出。數學家馮·諾伊曼用馳名世界的賭城—摩納哥的monte carlo—來命名這種方法,

為它蒙上了一層神秘色彩。在這之前,蒙特卡羅方法就已經存在。2023年,法國數學家布豐提出用投針實驗 的

方法求圓周率,這被認為是蒙特卡羅方法的起源。

另外,擬蒙特卡洛演算法在近幾年也獲得迅速發展。這種方法是用確定性的超均勻分布代替蒙特卡洛演算法中的

隨機數序列,對於某些特定問題計算速度比普通的蒙特卡洛演算法高幾百倍。

由於產生隨機數的隨機性,當我們用n個隨機點以蒙特卡羅方法來求解具體的問題時,其計算得到近似解的誤

差值有大有小,但是肯定有乙個確定的平均值,即一些誤差大於此值,而其餘誤差小於此值。鑑於此,顯然肯

定存在這樣的n個點,使得誤差的絕對值不大於平均值。如果我們能夠構造這樣的點集,就可以對原有的方法

進行較大的改進。擬蒙特卡羅方法就是至於此而提出的,它致力於構造其誤差比平均誤差顯著要好的那種點集,

而其求解形式與蒙特卡羅方法一致,只不過所用的隨機數不一樣。用蒙特卡羅方法求解問題時,影響結果好壞

的主要是隨機數序列的均勻性。而擬蒙特卡羅方法中的具有低偏差的一致分布點集較偽隨機數序列更為均勻,

而且用擬蒙特卡羅方法求解得到的是真正的誤差,避免了蒙特卡羅方法得到概率誤差的缺陷。

由此可見用擬蒙特卡羅方法求解問題的關鍵是如何找到乙個均勻散布的點集。目前常用的點集有glp點集(好格

子點集,good lattice point set)、gp點集(好點集,good point set)、halton點集及其變體、

hammersley點集等。

蒙特卡洛方法的理論基礎是大數定律。大數定律是描述相當多次數重複試驗的結果的定律,根據這個定律知道

樣本數量越多,其平均就越趨近於真實值。

2. 蒙特卡洛的應用

最經典的應用就是利用蒙特卡洛演算法求圓周率。**如下

**:

[cpp]view plain

copy

#include 

#define max_iters 1000000

using

namespace std;  

double rand(double l, double r)  

double getpi()  

return cnt * 4.0 / max_iters;  

}  int main()    

3. 蒙特卡洛積分

關於蒙特卡洛求積分,可以先參照如下文章。

接下來用蒙特卡洛積分求自然常數2015年阿里的一道筆試題。

首先考慮如下積分

接下來分別用蒙特卡洛積分牛頓萊布尼茲公式計算,在蒙特卡洛方法中樣本很多時,它們的值應該相等。

利用蒙特卡洛方法,影象大致如下

上述積分的目的是求陰影部分的面積,所以先在所標矩形內取

對於每一對

假設滿足上述條件的點有

而依據牛頓萊布尼茲公式可以得到

這兩種方法結果應該是相等的,即有

接下來寫寫**吧!

**:

[cpp]view plain

copy

#include 

#define max_iters 10000000

using

namespace std;  

struct point  

;  double rand(double l, double r)    

point getpoint()  

double getresult()  

return pow(2.0, 1.0 * n / m);  

}  int main()    

觀察一下執行結果,效果還是不錯的。如下圖

蒙特卡洛演算法

問題描述 在數值積分法中,利用求單位圓的1 4的面積來求得pi 4從而得到pi。單位圓的1 4面積是乙個扇形,它是邊長為1單位正方形的一部分。只要能求出扇形面積s1在正方形面積s中佔的比例k s1 s就立即能得到s1,從而得到pi的值。怎樣求出扇形面積在正方形面積中佔的比例k呢?乙個辦法是在正方形中...

蒙特卡洛演算法(PAI

在新學期中的繼續學習離散數學中,接觸到蒙特卡洛演算法,解決了我以前幾何圖形求面積不好求的問題,看到十分的開心。蒙特卡洛演算法就是模擬出指定某隨機事件發生的概率,比如我們想要判斷一下兩枚骰子在同時擲出後,同時出現 6 的頻率就可以通過增加實驗執行的次數,來確保該頻率越來越接近該事件發生的概率。也就是實...

蒙特卡洛理解

蒙特卡羅演算法並不是一種演算法的名稱,而是是一類隨機方法的統稱。這類方法的特點是,可以在隨機取樣上計算得到近似結果,隨著取樣的增多,得到的結果是正確結果的概率逐漸加大,但在 放棄隨機取樣,而採用類似全取樣這樣的確定性方法 獲得真正的結果之前,無法知道目前得到的結果是不是真正的結果。從特性特性來說,我...