Box–Muller 變換是一種快速産生符合标準正态分布随機數對的一種方法。基本思想是先得到服從均勻分布的随機數,再将服從均勻分布的随機數轉變為服從标準正态分布(零期望,單位方差)的獨立的随機數對。
它是由 George E. P. Box 與 Mervin E. Muller 在1958年提出,是最早運用與産生高斯白噪聲的著名算法之一,它的基本原理是計算出高斯随機數的相位和幅度,進而産生高斯随機數對的算法。實際上,該方法最早是在1934年由Raymond E. A. C. Paley和Norbert Wiener明确提及的。
George E. P. Box是一位統計學大師,統計學中的很多名詞術語都以他的名字命名。Box 之于統計學的家學淵源相當深厚,他的導師是統計學開山鼻祖皮爾遜的兒子-英國統計學家Egon Pearson;同時,Box還是統計學的另外一位巨擘級奠基人費希爾的女婿。統計學中的名言“All models are wrong, but some are useful”(所有模型都是錯的,但其中一些是有用的)也出自Box之口。
Box-Muller變換通常以标準和極坐标兩種形式表示。 Box和Muller給出的基本形式是從區間[0,1]上的均勻分布中獲取兩個樣本,并将它們映射為兩個标準的正态分布樣本。極坐标形式從不同的區間[-1, 1]中獲取兩個樣本,并将它們映射到兩個正态分布的樣本,而無需使用正弦或餘弦函數。
二、優點目前,産生正态分布随機數的主流方法有:
Box-Muller變換是作為逆變換采樣方法的一種計算效率更高的替代方法而開發的。Ziggurat算法為标量處理器(例如,舊的CPU)提供了一種更有效的方法,而Box-Muller變換對于具有矢量單位的處理器(例如,GPU或現代CPU)更勝一籌。
三、兩種形式1、标準形式的 Box–Muller 變換(1)公式假設變變量 U1 和變量 U2 是(0,1]均勻分布的随機數,
且 U1 和 U2 彼此獨立,令:
則 Z0 和 Z1 就是服從 N(0,1)的标準正态分布随機數,并且 Z0 和 Z1 相互獨立。
(2)标準形式的python代碼演示
def box_muller_trans():
x1 = 0
x2 = 0
w = 0
x1 = np.random.rand()
x2 = np.random.rand()
y1 = np.cos(2.0*np.pi*x1) * np.sqrt(-2.0*np.log(x1))
y2 = np.sin(2.0*np.pi*x2) * np.sqrt(-2.0*np.log(x2))
return y1,y2
假設變量 u 和變量 v 是在[-1,1]上的均勻分布随機量,
u 和 v 相互獨立,令:
故而,随機數 z0 和 z1 計算後得出如下結果:
z0 和 z1 是服從分布 N(0,1)的随機數,并且 z0 和 z1 相互 獨立。
(2)極坐标形式的python代碼演示
def box_muller_trans():
x1 = 0
x2 = 0
w = 0
while (w <= 0)|(w>=1.0):
x1 = 2.0*np.random.rand()-1
x2 = 2.0*np.random.rand()-1
w = x1*x1 x2*x2
w = np.sqrt(-2.0*np.log(w)/w)
y1 = x1*w
y2 = x2*w
return y1,y2
也可利用Matlab工具進行算法驗證。在實際工程應用中,如果直接采用标準形式的Box-Muller算法的時候,需要計算正弦(sin)和餘弦(cos)函數,這種計算耗時較多,效率比較低。Box-Muller 的極坐标形式更加常用,它避開了三角函數的計算,可以在很短的時間内産生大量的符合正态分布的随機數,能夠滿足了工程計算中對計算速度的要求。
更多的統計分布如何通過均勻分布的變換生成出來,大家可以參考 Sheldon M. Ross 的《統計模拟》。
四、Box-Muller變換的證明1、标準形式推導
設U1,U2相互獨立,均服從分布U(0,1)
則X、Y相互獨立且均服從标準正态分布。
證明:U1,U2~U(0,1) 所以
因為θ=2πU2, 根據一元随機變量函數分布(見附錄), 有:
因為
同樣,根據一元随機變量函數分布,有:
因為U1、U2互相獨立,而 θ隻取決于U2,R隻取決于U1,所以θ 、R互相獨立。而獨立随機變量聯合分布等于邊緣分布之積。所以
因為X = Rcosθ, y=Rsinθ, 根據二元随機變量函數分布,有:
其中
所以
所以
同理可得:
可見X和Y均服從标準正态分布。又因可驗證
所以X,Y互相獨立。
證畢。
3、極坐标形式的推導與證明設u,v相互獨立,均服從分布U(-1,1),且有
則X、Y相互獨立且均服從标準正态分布。
根據Box-Muller變換的标準形式
作變換
可得:
現在證明(*)變換滿足: U1,U2相互獨立,均服從分布U(0,1)。
證明:
圖4-1
如圖4-1所示。首先确認U1,U2的取值範圍均為(0,1)。因為(u,v)均勻分布在單位圓内,而
故U1取值範圍為(0,1)。θ=2πU2,因為θ的取值範圍是(0,2π), 故U2的取值範圍是(0,1)。
因為(u,v)均勻分布在單位圓内,故
根據二元随機變量函數分布(見附錄),有
現在求J
所以
所以
所以
同理:
故U1,U2均服從U(0,1)。
又
故U1,U2相互獨立。
證畢。
五、附錄1、一元随機變量函數的分布如果
y為單調函數,則
證明:因為
P{Y ≤y(x)} = P{X ≤x},
P{Y ≤y(x dx)} = P{X ≤x dx}
兩式相減得
P{y(x) ≤Y ≤y(x dx)} = P{x ≤X ≤x dx}
又
dy之所以加絕對值,是因為dy有可能為負(當y為減函數時,區間[y(x),y(x dx)]為負區間,dy為負)。
得
所以
設X,Y均為二元随機變量,即X=(X1,X2), Y=(Y1, Y2)
向量y=(y1, y2), 如果
則:
證明:
對于X取值區域上的面元dS,将經過函數y映射為Y的取值區域上的面元記為y(dS),有:
P{X∈dS} = P{Y∈y(dS)}
又
其中Area(y(dS))加絕對值,是因為Area(y(dS))可能為負(J<0時)。
又因為面積元之比等于雅可比行列式,即
Area(y(dS))=J * Area(dS)
所以
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!