蒙特卡羅模擬法的理論基礎是大數定律。其發展得益於計算能力的提升和計算成本的下降。蒙特卡羅模擬法在很多領域都有廣泛的應用。
引子圖片來源:Wikipedia
旋輪線的面積的證明:
車輪在地上旋轉一圈的過程中,車輪圓周上的某一點划過的曲線就叫做「旋輪線」。在數學和物理中,旋輪線都有著非常重要而優美的性質。比如說,一段旋輪線下方的面積恰好是這個圓的面積的三倍。這個結論最早是由伽利略(Galileo Galilei,1564-1642)發現的。不過,在沒有微積分的時代,計算曲線下方的面積幾乎是一件不可能完成的任務。伽利略是如何求出旋輪線下方的面積的呢?
他的方法簡單得實在是出人意料:它在金屬板上切出旋輪線的形狀,拿到秤上稱了稱,發現重量正好是對應的圓形金屬片的三倍。
「稱重」是對蒙特卡羅模擬法最形象的解釋。
蒙特卡洛模擬
我們首先把旋輪線放在坐標系中:
旋輪線的方程為:
x=r*(θ-sinθ)
y=r*(1-cosθ)
旋輪線內切於一個矩形,並且將這個矩形分為兩部分:旋輪線上方平面和下方平面。
假設點在平面上的分布是均勻的,而且所有點的面積、質量相等。則,旋輪線上方平面和下方平面的面積之比等於質量之比,也等於平面內點的個數之比。
如果從矩形區域內隨機取點,隨著次數的增加,在旋輪線上方平面內的總數與下方平面內的總數之比將趨向一個固定的數值。
這個數值,就是兩個平面的面積之比。只要有了這個比例,計算上下兩個平面的面積就簡單了。
由於旋輪線是軸對稱的,所以我們只研究[0,pi]區間內的面積比。
具體過程如下:
首先,在[0,2]內取一個隨機數作為y,在[0,pi]內取一個隨機數作為x,並且保證x和y是完全獨立的。
然後,根據旋輪線方程,用y求解θ,再用θ計算x′。則(x′ , y)在旋輪線上。
最後,比較x和x′。如果x>x′,則隨機取到的點(x , y)在旋輪線下平面內,計數變量counter增加1。否則,(x , y)在旋輪線上平面內。
重複以上過程N次,當N足夠大時,counter/N的值就是上平面與下平面的面積之比。
用Matlab做100000次隨機抽樣,counter/N最後收斂至0.7502(這是旋輪線下方平面與矩形面積的比例)。
容易得到,旋輪線下方平面的面積為3.0008pi=0.7502*(2*2pi)。圓面積為pi。結論得證。
對於一些特殊分布的問題,只要調整產生隨機數的算法就可以了。
隨機數是蒙特卡洛模擬的關鍵
在TB上,用以下程序進行測試,只要K線根數足夠多,Pips最終將收斂至0.75。
但是,在通達信上同樣的邏輯,
Pips並不能收斂至0.75。
經過分析,TB中同一根K線上的Seed1和Seed2是兩個獨立的隨機數。
但是在通達信中,同一根K線上的Seed1和Seed2是相同的。也就是說,隨機數X和Y並不獨立,存在線性關係Y=2/pi*X。
並且,這條直線在旋輪線下方平面內,所以,不管我們計算多少次,條件X2<X總是滿足,Pips的值恆等於1。
圖中Pips對1的偏離,並不是基於大數定理的收斂,而是計算誤差。
(來源:文華程序化)