Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

?
Lv 5
? 發問時間: 科學數學 · 4 年前

產生任意機率分布的亂數的公式推導和驗證?

我在底下網頁看見能產生任意機率分布的亂數的公式

https://www.ptt.cc/man/C_and_CPP/DB9B/DE78/M.11986...

公式

integral[a,p]f(x)dx=u*integral[a,b]f(x)dx

u:0到1之間的亂數

integral[a,b]:積分從a到b

f(x):機率密度函數

p:要產生的亂數

這公式是怎麼出來的?

我參考過底下的網頁,但還是想不出來。

https://en.wikipedia.org/wiki/Inverse_transform_sa...

https://en.wikipedia.org/wiki/Probability_integral...

圖片中a到b的直線方程式為

f(x)=2/(b-a)^2*(x-a)

按照維基百科的解法

設累積分布函數F(x)=integral[a,p]f(x)dx=u

則p=(u*(b-a)^2)^0.5+a

但網頁中是把f(x)=x直接帶入公式,得到

p=(u*(b^2-a^2)+a^2)^0.5

哪個才是對的呢?

已更新項目:

設u=0.81,a=1,b=2

(u*(b-a)^2)^0.5+a=1.9

(u*(b^2-a^2)+a^2)^0.5=1.852

兩個公式產生的值不同,同樣的u應該會產生同樣的p才對吧?

既然integral[a,b]f(x)dx=1,作者為何要故意加在式中?

Attachment image

1 個解答

評分
  • ?
    Lv 7
    4 年前
    最佳解答

    Inverse distribution transform:

    設 F(x) 為一連續型單變量 distribution function, 其 support 為

    一區間 [a,b]. 則在此區間 F 有 inverse, 以 G 表示之. 即:

    對任意 x in [a,b], G(F(x)) = x;

    對任意 p in [0,1], F(G(p)) = p.

    今若 U 是 [0,1] 間 uniform distributed 的隨機變數, 則 Y = G(U)

    具有 distribution function F.

    G 為 F 之 inverse, 也就是 p = F(x) iff. x = G(p), 或說是 p 和

    x 之間具有 p = F(x) = ∫_a^x dF(t) = ∫_a^x f(t) dt 的關係,其

    中 f 為 F 之 density function.

    因此, 欲產生 distribution function 為 F 之 pseudo random number,

    可考慮先產生 [0,1) 之 uniform PRN, 再做 Y = G(U) 之轉換. 沒有

    inverse function G 之 explicit form 時, 就是解方程式 F(x) = U.

    用 p.d.f. 表示, 就是解 ∫_a^x f(t) dt = U. (x 為方程式之 unknown.)

    但有時我們只有分布的 "形" 而不是 distribution function 或 p.d.f.,

    也就是 ∫_R f(x) dx ≠ 1. 但基於機率的基本特性, 在

    ∫_R f(x) dx 為 finite 的條件下, 我們知道 f(x)/∫_R f(t) dt

    就是所要的 p.d.f.. 所以, 上列方程式就成為

    ∫_a^x f(t) dt / ∫_a^b f(t) dt = p

    也就是

    ∫_a^x f(t) dt = p * ∫_a^b f(t) dt

    這也就是所引 BBS 文章中寫

    integral[a,p]f(x)dx=u*integral[a,b]f(x)dx

    的緣故.

    如 p.d.f. 是 f(x) = 2(x-a)/(b-a)^2, 則 d.f. 是

    F(x) = (x-a)^2/(b-a)^2 in a < x < b

    而 F(x) = p 即 x = a + √[p(b-a)^2].

    若 p.d.f. 是 f(x) = 2x/(b^2-a^2), 則 d.f. 是

    F(x) = (x^2-a^2)/(b^2-a^2) in 0 ≦ a < x < b.

    此時解 F(x) = p 得到的是 x = √[a^2+p(b^2-a^2)].

    以 p.d.f. 的 "形" 來說, 前者是 f*(x) = x-a in a < x < b,

    後者是 f*(x) = x in 0 ≦ a < x < b. 除非 a = 0, 否則二者有一

    個垂直差距 a 的平移. 或者說, 前者有 x-intersection a, 而後者

    卻通過原點.

    合二者為一 general form:

    f*(x) = x - h, h ≦ a < x < b,

    則 ∫_a^b f*(x) dx = [(b-h)^2-(a-h)^2]/2, 故 d.f. 為

    F(x) = [(x-h)^2-(a-h)^2]/[(b-h)^2-(a-h)^2]/2

    而 p.d.f. 為

    f(x) = 2(x-h)/[(b-h)^2-(a-h)^2].

    方程式 F(x) = p 之解為

    x = h + √{ (a-h)^2 + p [(b-h)^2-(a-h)^2]}

    而如果 U 是一個 [0,1) uniform distributed 的 random variable,

    則 Y = h + √{ (a-h)^2 + U [(b-h)^2-(a-h)^2]} 就是一個具有上

    述 distribution function F 或 p.d.f. f 之 r.v..

還有問題?馬上發問,尋求解答。