【发布时间】:2011-11-10 09:22:55
【问题描述】:
我需要一个库,其中包含用于生成随机数、给定平均值、标准差和使用三种分布之一的函数——指数分布、正态分布或统一分布。
即使是这三个中的一个也会有所帮助。 我正在寻找这样的东西 - http://www.codeproject.com/KB/recipes/zigurat.aspx,但在 c.
谢谢
【问题讨论】:
标签: c
我需要一个库,其中包含用于生成随机数、给定平均值、标准差和使用三种分布之一的函数——指数分布、正态分布或统一分布。
即使是这三个中的一个也会有所帮助。 我正在寻找这样的东西 - http://www.codeproject.com/KB/recipes/zigurat.aspx,但在 c.
谢谢
【问题讨论】:
标签: c
我可以推荐GNU Scientific Library 以供使用或获得灵感吗?它有几个Random Number Distributions,旨在用于C 和C++。
【讨论】:
制服:
使用uniform distribution生成范围[0,1]内的随机数:
double X=((double)rand()/(double)RAND_MAX);
指数型
使用参数 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 建议使用现有库。
【讨论】: