MATLAB-蒙特卡羅方法

什麼叫蒙特卡羅方法?

       蒙特卡羅方法又稱統計模擬法、隨機抽樣技術,是一種隨機模擬方法,以概率和統計理論方法爲基礎的一種計算方法,是使用隨機數(或僞隨機數)來解決很多計算問題的方法。將所求解的問題同一定的概率模型相聯繫,用電子計算機實現統計模擬或抽樣,以獲得問題的近似解。爲象徵性地表明這一方法的概率統計特徵,故借用賭城蒙特卡羅命名。

基本思想

       當所求問題的解是某個事件的概率,或者是某個隨機變量的數學期望,或者是與概率,數學期望有關的量時,通過某種試驗的方法,得出該事件發生的概率,或者該隨機變量若干個具體觀察值的算術平均值,通過它得到問題的解。

       當隨機變量的取值僅爲1或0時,它的數學期望就是某個事件的概率。或者說,某種事件的概率也是隨機變量(僅取值爲1或0)的數學期望。

蒙特卡羅方法的特點

優點:

1、能夠比較逼真地描述具有隨機性質的事物的特點及物理實驗過程

2、受幾何條件限制小

3、收斂速度與問題的維數無關

4、具有同時計算多個方案與多個未知量的能力

5、誤差容易確定

6、程序結構簡單,易於實現

缺點:

1收斂速度慢

2誤差具有概率性

3在粒子輸運問題中,計算結果與系統大小有關    

      所以在使用蒙特卡羅方法時,要“揚長避短”,只對問題中難以用解析(或數值)方法處理的部分,使用蒙特卡羅方法計算,對那些能用解析(或數值)方法處理的部分,應當儘量使用解析方法

什麼是隨機數?

      在連續型隨機變量的分佈中,最簡單而且最基本的分佈是單位均勻分佈。由該分佈抽取的簡單子樣稱爲隨機數序列,其中每一個體稱爲隨機數

符號:

兩個特點:獨立性,均勻性

產生隨機數

隨機數表方法

      隨機數表是由0,1,2,3,4,5,6,7,8,9十個數字組成,每個數字以0.1的等概率出現,數字之間相互獨立,這些數字序列叫作隨機數字序列。 (如果要得到n位有效數字的隨機數,只需將表中每n個相鄰的隨機數字合併在一起,且在最高位的前邊加上小數點即可。例如,某隨機數表的第一行數字爲7 6 3 4 2 5 8 9 1...,要想得到三位有效數字的隨機數一次爲0.763,0.425,0.891...)

物理方法

      利用某些物理現象,在計算機上增加些特殊設備,可以在計算機上直接產生隨機數。 作爲隨機數發生器的物理源主要有兩種:一種是根據放射性物質的放射性,另一種是利用計算機的固有噪聲。

      一般情況下,任意一個隨機數在計算機內總是用二進制的數表示的:或者爲0,或者爲1。因此,利用物理方法在計算機產生隨機數,就是要產生只取0或1的隨機數字序列,數字之間相互獨立,每個數字取0或1的概率均爲0.5

缺點

      隨機數表需在計算機中佔有很大內存,而且也難以滿足蒙特卡羅方法對隨機數需要量非常大的要求,因此,該方法不適於在計算機上使用。

      物理方法產生的隨機數序列無法重複實現,不能進行程序復算。給驗證結果帶來很大困難。而且增加隨機數發生器和電路聯接等 附加設備,費用昂貴。因此該方法也不適合在計算機上使用。

僞隨機數

     用遞推公式

產生隨機數序列。  

僞隨機數存在的兩個問題

       遞推公式和初始值確定後,整個隨機數序列便被唯一確定。不滿足隨機數相互獨立的要求。 由於隨機數序列是由遞推公式確定的,而在計算機上所能表示的[0,1]上的數又是有限的,因此,這種方法產生的隨機數序列就不可能不出現重複。隨機數序列出現週期性的循環現象。

解決方案

第一個問題:不能從本質上加以改變,但只要遞推公式選的比較好,隨機數間的相互獨立性是可以近似滿足的。

第二個問題:因爲用蒙特卡羅方法解任何具體問題時,所使用的隨機數的個數總是有限的,只要所用隨機數的個數不超過僞隨機數序列出現循環現象時的長度就可以了。

應用:蒙特卡羅方法計算積分

       可以通俗地說,蒙特卡羅方法是用隨機試驗的方法計算積分,即將所要計算的積分看作服從某種分佈密度函數f(r)的隨機變量g(r)的數學期望        

通過某種試驗,得到N觀察值r1,r2,…,rN(用概率語言來說,從分佈密度函數f(r)中抽取N個子樣r1,r2,…,rN,),將相應的N個隨機變量的值g(r1),g(r2),…,g(rN)的算術平均值  

 

作爲積分的估計值(近似值)。 

蒙特卡羅方法步驟如下:

1、在區間【a,b】上利用計算機均勻產生n個隨機數x1,x2·····xn,這個可以在MATLAB軟件中用unifrnd命令實現。

2、計算每一個隨機數相應的被積函數值f(x1),f(x2)····f(xn)。

3、計算被積函數值的平均值

4、所以2.1式的值≈

簡單定積分例子:用蒙特卡羅方法求

首先我們進行嚴格的數學計算, 便於後面與蒙特卡洛計算方法所得結果形成對比:已知 e^x的原函數是e^x,那麼定積分值就是:

我們可以在Matlab中輸入以下代碼進行精確計算:exp(2)-exp(0),這個值是此定積分的真實值. 下面進行蒙特卡洛計算上述定積分,其MATLAB代碼如下:

N=500; 
x=unifrnd(0,2,N,1); 
mean(2*exp(3*x.^2))

上述三條語句完整實現了蒙特卡洛計算上述定積分步驟.第一條語句是設定了停止條件, 共做N次Monte Carlo 模擬.第二條語句實現了在積分區間上均勻產生N個隨機數.第三條語句實現蒙特卡洛計算方法的面積逼近.對N設置不同的值,觀察所得蒙特卡洛計算方法定積分值,如表1所示,我們可以發現:當不斷增大N值時,所得結果越來越接近真實值.

蒙特卡羅計算方法性質:

蒙特卡洛計算方法依據概率統計理論,具有統計特性,主要表現在以下三個方面.

1.蒙特卡洛計算方法具有隨機性、不確定性.即每次運行結果都會不一樣,因爲計算機產生隨機數並不是可以重現的.

2.蒙特卡洛計算方法具有統計穩定性。雖然每次運行產生隨機數是不一樣的,但是隨機數的概率分佈是一樣的,所以蒙特卡洛計算方法可以滿足概率統計的穩定性.

3.隨着隨機數數量增加,蒙特卡洛計算方法所得結果會更加逼近真實值,這就是我們所講的依概率收斂到真實值意義.

%%  蒙特卡羅方法求定積分
%給定曲線y =2 – x2 和曲線y3 = x2,曲線的交點爲:P1( – 1,1 )、P2( 1,1 )。
%曲線圍成平面有限區域,用蒙特卡羅方法計算區域面積。
%隨機產生100000個點
P=rand(100000,2);
%定義x y 的範圍
x=2*P(:,1)-1;
y=2*P(:,2);
%找出在函數範圍的數
% k = find(X) 返回一個包含數組 X 中每個非零元素的線性索引的向量。
% 如果 X 爲向量,則 find 返回方向與 X 相同的向量。
% 如果 X 爲多維數組,則 find 返回由結果的線性索引組成的列向量。
% 如果 X 包含非零元素或爲空,則 find 返回一個空數組。
II=find(y<=2-x.^2&y.^3>=x.^2);
%計算索引的長度
M=length(II);
%計算面積
S=4*M/100000
plot(x(II),y(II),'g.')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章