我需要一个具有生成随机数,给定平均值,标准差和使用三种分布之一 - 指数,正态或统一的函数的库。
即便是其中一个会有所帮助。 我正在寻找类似的东西 - http://www.codeproject.com/KB/recipes/zigurat.aspx,但是在c。
感谢
答案 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建议使用现有的库。