严家桥在哪里

嵌入式设计 信息论 量子力学

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

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

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)

 

 


 

阅读更多
文章标签: 语言 c 算法 百度
个人分类: 编程语言使用杂记
想对作者说点什么? 我来说一句

verilog产生<em>高斯</em>随机数

2018年05月08日 0B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭