- MATLAB 2020数学计算从入门到精通
- 林凤涛等编著
- 318字
- 2022-05-10 20:52:53
3.3.5 Box-Muller算法
设(X,Y)是一对相互独立的服从正态分布N(0,1)的随机变量,则有概率密度函数:
![](https://epubservercos.yuewen.com/403E7C/23083822209829806/epubprivate/OEBPS/Images/98_04.jpg?sign=1739404619-aZvAPYuL55eZ5TlYn1LfMtv1SNZsXDAB-0-1f7f63d14128ef75d4d1bc5e73a34220)
令x=Rcosθ,y=Rsinθ,其中,θ∈[0,2π],则R有分布函数:
![](https://epubservercos.yuewen.com/403E7C/23083822209829806/epubprivate/OEBPS/Images/98_05.jpg?sign=1739404619-2xmCSk78WZfS7WpggxN6foxZeKqFTdG7-0-67a4f96d1da734b39017b7569220aa8b)
令,则分布函数的反函数得:
。
如果U1服从均匀分布U(0,1),则R可由模拟生成(1-U1)也为均匀分布,可被U1代替)。令θ为2πU2,U2服从均匀分布U(0,1)。得:
![](https://epubservercos.yuewen.com/403E7C/23083822209829806/epubprivate/OEBPS/Images/99_02.jpg?sign=1739404619-sFumm5TDdUMgpy40NKRv1EOyIaLH6dN8-0-fdf89bfa23134d330786ca02d6b5ad67)
X和Y均服从正态分布。
用Box Muller方法来生成服从正态分布的随机数是十分快捷方便的,是通过[0,1]之间的均匀分布和单位圆来生成正态分布的一种算法。这种算法虽然不需任何估计,但是有21%的拒绝率,且中间包括对数、平方根运算,所以效率并不高。
![](https://epubservercos.yuewen.com/403E7C/23083822209829806/epubprivate/OEBPS/Images/99_03.jpg?sign=1739404619-oNKRKtauHoAypnDh8mDtcrH02bEPy7Q8-0-d3335bd2ef31c20a10f22e9f320ceda1)
图3-6 创建正态随机数直方图
例3-20: 利用Box Muller创建正态随机数。
解: MATLAB程序如下。
![](https://epubservercos.yuewen.com/403E7C/23083822209829806/epubprivate/OEBPS/Images/99_04.jpg?sign=1739404619-Ln63U4S25tfXqBlNAyAKCnjfFLFOkt1w-0-471d76f202e9a38d6e66d62424aea3dc)
![](https://epubservercos.yuewen.com/403E7C/23083822209829806/epubprivate/OEBPS/Images/99_05.jpg?sign=1739404619-YOBzrq44i2cNjYbx3kU0vSEBmrgvr32R-0-fe6ce8738fd6865a316ed2f5aa98537b)
运行结果如图3-7所示。
![](https://epubservercos.yuewen.com/403E7C/23083822209829806/epubprivate/OEBPS/Images/100_01.jpg?sign=1739404619-aLcG448VvwxyqpGASDcTuC96Zi5oQTff-0-0e2decd0a29fdbf22b5907c2a67d3878)
图3-7 创建正态随机数分布图