精選文章
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
用蒙地卡羅方法來計算圓周率
用蒙地卡羅方法來計算圓周率
一、介紹蒙地卡羅方法
當一個問題太複雜、沒辦法用公式直接算出答案時,該怎麼辦?蒙地卡羅方法(Monte Carlo Method)的答案很簡單:算不出來,就「試出來」。用隨機抽樣反覆模擬成千上萬次,再從結果的統計分布去逼近答案;模擬次數越多,結果通常就越準。它給的不是一個絕對精確的數字,而是「最可能的答案」以及「可能的範圍」——這是一種用隨機性去馴服複雜性的方法。
由來:1946 年,數學家斯坦尼斯瓦夫.烏拉姆(Stanisław Ulam)在病中玩單人紙牌遊戲,想算出贏牌的機率,他發現與其埋頭推 導,不如實際玩很多次再統計。之後他與約翰.馮紐曼(John von Neumann)在洛斯阿拉莫斯國家實驗室,把這個想法用在中子擴散等核物理計算上——這些問題正是源自曼哈頓計畫的研究。同事尼古拉斯.梅特羅波利斯(Nicholas Metropolis)為它取了「蒙地卡羅」這個代號,名稱 來自摩納哥以賭場聞名的蒙地卡羅,因為方法的核心就是「機率」與「隨機」。而 ENIAC 等早期電子計算機的出現,讓大量模擬真正變得可行 ;1949 年 Metropolis 與 Ulam 發表了論文〈The Monte Carlo Method〉。
基本步驟:
- 定義問題中的不確定因素與它們的機率分布。
- 依照這些分布隨機抽樣,產生一組情境。
- 對每個情境計算結果。
- 重複數千到數百萬次。
- 統計所有結果,得出平均值、分布與機率。
它的優點是能處理高維度、非線性、沒有公式解的問題,而且概念直覺;限制則是需要大量運算,而且結果好壞取決於假設的機率分布是否 正確 —— 假設錯了,模擬再多次也是錯的(垃圾進,垃圾出)。
二、應用領域
- 物理:中子擴散、輻射傳遞(最早的用途)、粒子物理實驗的偵測器模擬。
- 醫學:放射治療的劑量計算。
- 工程可靠度:將零件公差、材料強度、負載等不確定性隨機抽樣,估算系統失效機率與誤差範圍。
- 電腦圖學:路徑追蹤(Path Tracing)以隨機取樣光線路徑來計算光照積分,產生逼真的影像,電影動畫與遊戲渲染都大量使用。
- 人工智慧:蒙地卡羅樹搜尋(MCTS)以大量隨機對局評估棋步優劣,是 AlphaGo 的核心技術之一。
- 統計與貝氏推論:馬可夫鏈蒙地卡羅(MCMC,例如 Metropolis–Hastings 演算法、Gibbs 抽樣)用來從複雜的後驗分布中抽樣。
- 氣象與氣候:系集預報,以多組略有差異的初始條件反覆模擬。
- 複雜系統:模擬大量個體互動的行為。
三、金融領域應用簡介
- 選擇權定價:假設股價服從幾何布朗運動(GBM),模擬成千上萬條可能的價格路徑,計算每條路徑到期時的報酬(payoff),以無風險利率折現後取平均,即得到選擇權價格的估計。對於路徑相依的選擇權(例如以期間平均價格結算的亞式選擇權 Asian option>),往往沒有簡單的封閉解,蒙地卡羅方法特別好用。
- 風險值(VaR)與風險管理:模擬投資組合在未來一段時間的損益分布,取其分位數(例如 99%)來估算「在一定信心水準下最多可能損失多少」,也可延伸計算預期損失(CVaR)與壓力測試。
- 投資組合與退休規劃:以隨機報酬模擬未來數十年的資產變化,估算「資金撐到退休後 30 年」的成功機率,協助決定提領率與資產配置。
⚠️ 提醒:金融模擬常假設報酬呈 常態分布,但真實市場存在肥尾與極端事件(黑天鵝),模型假設是否合理,與模擬次數同樣重要。
四、計算圓周率的原理
想像一個邊長為 1 的正方形,範圍是 [0,1]×[0,1]。以原點為圓心、半徑 1 畫圓,落在這個正方形裡的正好是四分之一圓。
為什麼用四分之一圓?完整的做法是在 2×2 的正方形 [−1,1]×[−1,1] 裡放一個半徑 1 的整圓,面積比為 π/4。但圓與正方形都對 稱於兩軸,四個象限的情況完全相同,所以只取第一象限(x, y ∈ [0,1])比例不變,而且亂數直接取 0~1 之間即可,更簡單。
一個隨機點 (x, y) 落在四分之一圓內的條件是:
隨機丟 N 個點,數出落在圓內的點數,則「圓內點數 / N」會逼近 π/4,因此:
五、標準差與誤差
每一個點只有兩種結果:落在圓內(機率 p = π/4 ≈ 0.7854)或圓外,這是一次伯努利試驗。N 個點中圓內比例的變異數為 p(1−p)/N,而估計值是比例乘以 4,所以估計值的標準差為:
誤差與 1/√N 成正比:點數增加 100 倍,精度才提高 10 倍(多一位有效數字)。這正是蒙地卡羅方法的特性——簡單通用,但收斂 較慢。
依常態分布近似,真實值落在估計值附近的機率:
| 範圍 | 機率 |
|---|---|
| ±1σ | 68.3% |
| ±2σ | 95.4% |
| ±3σ | 99.7% |
程式中顯示的 ssss ≤ xxxx ≤ llll,機率 99.7%,就
是「估計值 ± 3σ」的區間:中間是估計值,左右是下限與上限。
- 若希望整個 ±3σ 區間寬度(6σ)小於 0.01,需要 N ≈ (6×1.642/0.01)2 ≈ 97 萬個點。
- 若希望上下限都以 3.14 開頭(下限 ≥ 3.14,即 3σ ≤ π−3.14 ≈ 0.00159),需要約 960 萬個點。
💡 小插曲:品質管理中的「六標準差(Six Sigma)」指規格界限距平均值 ±6σ;考慮製程長期約 1.5σ 的偏移後,不良率約為每百萬個 3.4 個。
六、程式與線上執行
我用 Kotlin Multiplatform 寫了一個小程式,同時支援桌面版與網頁版:
功能包括:以滑桿調整點數與速度、Start/Pause/Reset 控制、可指定亂數種子(seed)以重現結果、即時顯示估計值、σ、誤差等 KPI>,以及收斂圖表。
七、執行結果
圖一:N = 10,000,000、seed = 0。估計值 3.141047,區間 3.139489 ≤ 3.141047 ≤ 3.142605,機率 99.7%;圓內點數 7,852,617,σ = 0.000519,誤差 0.000546,真實 π 落在區間內 ✓
解讀:4 × 7,852,617 ÷ 10,000,000 = 3.1410468;σ = 1.642/√107 ≈ 0.000519,±3σ 即 ±0.001558。實際誤差 |3.1410468 − π| ≈ 0.000546,約為 1.05σ,完全在預期的統計波動範圍內。收斂圖也清楚呈現 1/√N 的特性:每往右一個數量級,帶寬約 縮小為 1/√10 ≈ 0.32 倍。
八、結語
從烏拉姆的一副紙牌,到核物理、電腦圖學、AlphaGo 與金融風險管理,蒙地卡羅方法用「大量隨機」換來「可靠的近似」。用它計算圓周 率雖然不是最有效率的方法,卻是理解這套思想最直覺的入口:丟一千萬個點,我們不只得到 3.141047,還知道這個答案有多可信。歡迎到線上版親自試試,看看 π 如何在隨機中慢慢浮現。
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式


留言
張貼留言