【寒江雪】Box-Muler算法——均匀分布转正态分布

Box-Muler算法

​ Box-Muller,一般是要得到服从正态分布的随机数,基本思想是先得到服从均匀分布的随机数再将服从均匀分布的随机数转变为服从正态分布。

​ Box-Muller 算法隐含的原理非常深奥,但结果却是相当简单。它一般是要得到服从正态分布的随机数,基本思想是先得到服从均匀分布的随机数再将服从均匀分布的随机数转变为服从正态分布。

如果在 (0,1] 值域内有两个独立的均匀分布的随机数字 U1 和 U2,
可以使用以下两个等式中的任一个算出一个正态分布的随机数字 Z:
Z0 = R * cos( θ )
或
Z1= R * sin( θ )
其中,
R = sqrt(-2 * ln(U1))
θ = 2 * π * U2
那么Z0和Z1是满足标准正态分布的独立随机数字。
由于R^2是二维正态分布(X,Y)的平方,所以它是有两个自由度的卡方分布,在两个自由度选取某个的特殊情况下,卡方分布和指数分布一致,所以上述R^2的方程式一个简单的产生指数随机数的方法。
正态值 Z0和Z1 有一个等于 0 的平均值和一个等于 1 的标准偏差,可使用以下等式将 Z 映射到一个平均值为 m、标准偏差为 sd 的统计量 X:
X = m + (Z * sd)

​ 代码实现

float BoxMuler() {
        float a = UnityEngine.Random.Range(0.01f, 1.01f);
        float b = UnityEngine.Random.Range(0.01f, 1.01f);
        float res = Mathf.Sqrt(-2 * Mathf.Log(a)) * Mathf.Cos(2 * Mathf.PI * b);
        return res;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值