[其他] 亂數轉換
我念一些數值分析的書,但這部份都只給結果,讓我感到很尷尬,
想請教以下想法是否可行。
均勻分佈 轉 指數分佈
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)
→
07/25 11:15, , 1F
07/25 11:15, 1F
→
07/25 11:16, , 2F
07/25 11:16, 2F
→
07/25 11:17, , 3F
07/25 11:17, 3F
→
07/25 11:19, , 4F
07/25 11:19, 4F
→
07/25 11:20, , 5F
07/25 11:20, 5F
→
07/25 11:21, , 6F
07/25 11:21, 6F
→
07/25 11:21, , 7F
07/25 11:21, 7F
→
07/25 11:22, , 8F
07/25 11:22, 8F
→
07/25 11:23, , 9F
07/25 11:23, 9F
→
07/25 11:24, , 10F
07/25 11:24, 10F
→
07/25 11:24, , 11F
07/25 11:24, 11F
→
07/25 18:54, , 12F
07/25 18:54, 12F
→
07/25 19:00, , 13F
07/25 19:00, 13F
→
08/13 16:59, , 14F
08/13 16:59, 14F
→
09/17 14:55, , 15F
09/17 14:55, 15F