3162
請問關於蒙地卡羅法
請問一下蒙地卡羅法與均勻切割法這兩者在計算上的差異性是什麼?例如是在什麼情況下用怎樣的方法比較好可以兩個都舉例嗎(我是用Fortran 90寫程式的
但回答方式不限定程式語言 能用Fortran回答最好)
Fortran Compiler 內建的 Library 會提供程式師一個隨機變數(Random Number)產生器
一個優秀的隨機變數產生器應具備以下三項特質:1. 分佈均勻2. 迴歸週期極長3. 雜亂度高(指下一個隨機變數和上一個之間的關係不可預測)若是隨機變數產生器過於陽春
聊備一格
則使用蒙地卡羅法並不能得到良好的結果。
下面的例子說明「蒙地卡羅法」與「均勻切割法」的差異性:《題目一》 甲、乙兩人相約六點至七點間在某地相見
若甲先到會等 15 分鐘
若乙先到會等 10 分鐘
則兩人能見面的機率為何?「均勻切割法」:PROGRAM A1INTEGER*4 I
J
N
N1
N2REAL*8 SN = 10000N1 = INT(FLOAT(N)/60.*15.)N2 = INT(FLOAT(N)/60.*10.)S = 0.DO I = 0
NDO J = 0
NIF (I .LE. J) THENIF (J-I .LE. N1) S = S 1.ELSEIF (I-J .LE. N2) S = S 1.END IFEND DOEND DOPRINT *
N
S/FLOAT(N)/FLOAT(N)END執行結果: 10000 0.371593060000「蒙地卡羅法」:PROGRAM A2REAL*4 N1
N2
T1
T2REAL*8 S
NN1 = 1./60.*15.N2 = 1./60.*10.S = 0.N = 0.1T1 = RANDOM*()T2 = RANDOM*()N = N 1.IF (T1 .LE. T2) THENIF (T2-T1 .LE. N1) S = S 1.ELSEIF (T1-T2 .LE. N2) S = S 1.END IFIF (MOD(INT(N)
10000000) .EQ. 0) PRINT *
INT(SQRT(N))
S/NGOTO 1END執行結果: 3162 0.371365000000 4472 0.371386500000 5477 0.371406066667 6324 0.371474800000 7071 0.371520860000 7745 0.371542566667 8366 0.371551314286 8944 0.371542787500 9486 0.371560733333 10000 0.371560640000(以 CTRL/C 中斷程式執行)「均勻切割法」的優點:當取樣數很大時
可得到相當精確的結果
取樣數的大小無限制。
缺點:取樣數必須事先決定
而且在全部的取樣數計算完成之前
中途的計算結果並不具有參考價值。
「蒙地卡羅法」的優點:取樣數不必事先決定
程式跑愈久結果愈精確
在運算過程中「隨時」輸出計算結果仍具有相當參考價值。
缺點:當取樣數超過隨機變數產生器的「迴歸週期」後
更多的取樣數也不會讓結果更加精確。
(也就是取樣數有一上限值)通常
用「均勻切割法」能解的題目用「蒙地卡羅法」也一定能解。
但是用「蒙地卡羅法」能解的題目用「均勻切割法」卻不一定能解
這也是「蒙地卡羅法」的優勢之一。
例如下面這道題目:《題目二》 有一醉鬼由某一點出發
取任意方向直行 2 公尺
再由該點出發取任意方向直行 2 公尺
‥‥‥ 如此重複 5 次之後
所在位置與原出發點的距離在 3 公尺之內的機率為何?用「蒙地卡羅法」很容易解(就請你自行練習囉)
但是用「均勻切割法」就很難以下手了。
參考資料
自己
蒙地卡羅模擬,蒙地卡羅法,蒙地卡羅模擬法,蒙地卡羅技術,蒙地卡羅分析,淡水蒙地卡羅,蒙地卡羅在哪,蒙地卡羅賭場,蒙地卡羅演算法,蒙地卡羅pub蒙地卡羅,隨機變數,Fortran Compiler,Fortran,MOD,切割,END IF IF,INT,程式語言
VB|VB.net|陣列|檔案|輸出|呼叫|執行檔|原始檔|表單|連結|物件|VBA|運算式|VB6|統計|資料|程式|計數器|OLE|資料庫|欄位|元件|驗證|副程式|程式碼|合併|按鍵精靈|迴圈|巨集|
3162
參考:http://tw.knowledge.yahoo.com/question/question?qid=1509030505038如有不適當的文章於本部落格,請留言給我,將移除本文。謝謝!
留言列表