在c中生成具有特定分布的随机数

时间:2011-09-05 06:16:01

标签: c

我需要一个具有生成随机数,给定平均值,标准差和使用三种分布之一 - 指数,正态或统一的函数的库。

即便是其中一个会有所帮助。 我正在寻找类似的东西 - http://www.codeproject.com/KB/recipes/zigurat.aspx,但是在c。

感谢

2 个答案:

答案 0 :(得分:15)

我可以推荐GNU Scientific Library使用或灵感吗?它有几个Random Number Distributions,设计用于C和C ++。

答案 1 :(得分:11)

<强>均匀的:
使用uniform distribution生成[0,1]范围内的随机数:

double X=((double)rand()/(double)RAND_MAX);

<强> Exponentional
使用参数lambda生成exponentional random variable

-ln(U)/lambda (where U~Uniform[0,1]). 

<强>正常: [最简单的方法[虽然耗费时间]使用central limit theorem,[总和均匀分布的数字],但wikipedia page中还有其他方法,例如生成的box muller transform 2个独立的随机变量:X,Y~N(0,1)

X=sqrt(-2ln(U))*cos(2*pi*V)
Y=sqrt(-2ln(U))*sin(2*pi*V)
where U,V~UNIFORM[0,1]

从X~N(0,1)转换为Z~N(m,s ^ 2)很简单:Z = s*X + m

虽然你可以生成这些随机数,但我仍然支持@Amigable Clark Kant建议使用现有的库。