C语言实现高斯分布的原理——Box-Muller 方法

来源:互联网 发布:数据挖掘的分析方法 编辑:程序博客网 时间:2024/05/18 00:23

 在网上下载了现成的实现高斯分布的代码,但是在看代码时却不明白其产生的公式。

x[i]=sqrt(-2*log(x1[i]))*cos(x2[i]*M_PI);

本来按照设想,计算高斯分布应该是按照高斯分布的概率密度函数来,但是上述公式确实看得晕。

后来才发现上述方法称作Box-Muller 方法。详细介绍见下面转载百度百科的解释:

转自:http://baike.baidu.com/view/1710258.htm

box-muller

  Box-Muller 是产生随机数的一种方法。Box-Muller 算法隐含的原理非常深奥,但结果却是相当简单。
  如果在 (0,1] 值域内有两个一致的随机数字 U1 和 U2,
  可以使用以下两个等式中的任一个算出一个正态分布的随机数字 Z:
  Z = R * cos( θ )
  或
  Z = R * sin( θ )
  其中,
  R = sqrt(-2 * ln(U2))
  θ = 2 * π * U1
  正态值 Z 有一个等于 0 的平均值和一个等于 1 的标准偏差,可使用以下等式将 Z 映射到一个平均值为 m、标准偏差为 sd 的统计量 X:
  X = m + (Z * sd)

 

 


 

原创粉丝点击