作者EdisonX (閉上眼的魚)
看板Math
標題[其他] 亂數轉換
時間Wed Jul 25 07:30:45 2012
我念一些數值分析的書,但這部份都只給結果,讓我感到很尷尬,
想請教以下想法是否可行。
均勻分佈 轉 指數分佈
1. 以機率分佈函數做反函式轉換
f(x,λ) = λexp(-λx) = p , for x>=0
-> exp(-λx) = p / λ
-> -λx = ln (p / λ)
-> x = -ln(p/λ) / λ
避免 ln(0) 發生問題, 故 p 為 (0,1] 之隨機亂數。
2. 以機率累計分佈函式做轉換
F(x,λ) = 1 - exp(-λx) = p', for x>=0
-> (一串推導後)
-> x = -ln(1-p') / λ
避免 ln(1-p') = 0, 故 p' 為 [0,1) 之隨機亂數,
令 p = 1-p' = (0,1] 之隨機亂數,化簡成
x = -ln(p) / λ
以此方式推出來後,和我看過的轉換相似但不同
x = -λ * ln(p)
請問這裡是我推錯了嗎?
再請教上述哪種方法可行?或都不可行?或都可行?
若都可行的話,請教是否哪種較好?
均勻分佈 轉 常態分佈
sd : 標準差 , mean : 平均
我一樣是用反函式概念去做,由於累計機率函式用到 erf,
故挑用機率函式做反推,推出來後變成
temp = sqrt{ -2 * ln [ p * sqrt(2*PI*sd*sd) ] }
x = +- sd * tmp + mean
要正要負再做一次亂數做決定。
但這個和我看到的差超多 (Box-Miller Method, 請問我該到哪查這方法的推導細節 ?)
U , V : [0,1] 均勻亂數
x1 = sqrt(-2 ln(U) ) * cos(2*PI*V) * sd + mean
x2 = sqrt(-2 ln(U) ) * sin(2*PI*V) * sd + mean
請教這裡用反函式方式是否合理?
目前似乎沒看到有人以 機率函式 方式做反推, 是我觀念有誤嗎?
謝謝各位先進不吝指教, 感激不盡。
--
If there is no tomorrow,
I want to see u last time.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.161
※ 編輯: EdisonX 來自: 180.177.76.161 (07/25 07:46)
→ yhliu :設 U~uniform(0,1), 令 X = F^{-1}(U), 則 X~F, 07/25 11:15
→ yhliu :其中F是機率的(累積)分布函數(distribution funct.) 07/25 11:16
→ yhliu :要的指數分布 d.f. 是 1-e^{-λx}, 則 F^{-1} 是 07/25 11:17
→ yhliu :X = -ln(1-U)/λ. 但用 X=-ln(U)/λ 亦可. 因除卻端 07/25 11:19
→ yhliu :點外, U~uniform(0,1) 則 1-U 亦然. 07/25 11:20
→ yhliu :若指數分布的 d.f. 寫成 1-e^{-x/λ}, 則 X=-λln(U) 07/25 11:21
→ yhliu :是所需亂數. 07/25 11:21
→ yhliu :常態分布的 d.f. 沒有 closed form, 更甭說其反函數. 07/25 11:22
→ yhliu :至於 Box-Miller method, U, V 是 i.i.d. U(0,1) 亂 07/25 11:23
→ yhliu :以 Box-Miller 公式轉換出來的兩個新變數的分布, 請 07/25 11:24
→ yhliu :利用雙變數轉換公式驗算一下即知. 07/25 11:24
→ EdisonX :謝謝 :) 07/25 18:54
→ EdisonX :請教,雙變數轉換是 ??? 07/25 19:00