你也能看懂的:蒙特卡羅方法

Steven·簡談發表於2020-02-14

蒙特卡羅方法,也稱統計模擬方法,是1940年代中期由於科學技術的發展和電子計算機的發明,而提出的一種以概率統計理論為指導的數值計算方法。是指使用隨機數(或更常見的偽隨機數)來解決很多計算問題的方法
蒙特卡羅方法可以粗略地分成兩類:一類是所求解的問題本身具有內在的隨機性,藉助計算機的運算能力可以直接模擬這種隨機的過程。另一種型別是所求解問題可以轉化為某種隨機分佈的特徵數,比如隨機事件出現的概率,或者隨機變數的期望值。通過隨機抽樣的方法,以隨機事件出現的頻率估計其概率,或者以抽樣的數字特徵估算隨機變數的數字特徵,並將其作為問題的解。


概念

蒙特卡羅方法是一種計算方法。原理是通過大量隨機樣本,去了解一個系統,進而得到所要計算的值

通過一個簡單的例子,可以幫助我們很快地瞭解。在中學的數學課上,學習概率的相關內容時,就有這樣的題目:正方形內部有一個相切圓,若是往正方形區域扔一個小石頭,其落在圓內的的概率是多少?

解答過程很簡單,用圓的面積除以正方形的面積就行了,為 π4\frac \pi 4

那這跟蒙特卡羅方法有什麼關係呢?現在已經知道了一個概率值,但是這裡面有一個數其實是不確定的,那就是 π\pi(一個無限不迴圈小數),如果讓你求它的近似值(精確到某一位),該怎麼做呢?
在這裡插入圖片描述
現在就輪到蒙特卡羅方法出場了,通過概率來求值,在正方形中隨機放置大量的點,比如 10000 個,這樣每一個點落在圓內的概率就是 π4\frac \pi 4,將落在圓內點的數量比上所有點的數量,就可以把這個概率的具體值求出來,再乘 4 就是 π\pi 的值。

點的數量越多精確度就越高,在求解一些無精確值的問題時可以發揮很大的作用,比如一些曲線圍成圖形的面積、積分問題等。而均值是概率密度與自變數乘積的積分,期望就是均值,最優值往往接近或就是期望,所以蒙特卡羅就是求最優值的方法


案例解讀

使用 MatLab 語言

求一個簡單的面積問題:y=x2y=12xy = x^2 ,y = 12 - xXX 軸在第一象限圍成一個曲邊三角形。設計一個隨機試驗,求該圖形的近似值

x = 0:0.25:12;
y1 = x.^2;
y2 = 12-x;
plot(x, y1, x, y2)
xlabel('x');
ylabel('y');
legend('y1=x^2', 'y2=12-x');
title('繪製');
axis([0 15 0 15]);
text(3, 9, '交點');
grid on

% 隨機生成點
x = unifrnd(0, 12, [1, 10000000]);
y = unifrnd(0, 9, [1, 10000000]);
frequency = sum(y<x.^2 & x<=3)+sum(y<12-x & x>=3);
area = 12*9*frequency/10^7

圖形如下:
在這裡插入圖片描述
結果:
在這裡插入圖片描述

相關文章