【问题标题】:generating random number with a specific distribution in c在c中生成具有特定分布的随机数
【发布时间】:2011-11-10 09:22:55
【问题描述】:

我需要一个库,其中包含用于生成随机数、给定平均值、标准差和使用三种分布之一的函数——指数分布、正态分布或统一分布。

即使是这三个中的一个也会有所帮助。 我正在寻找这样的东西 - http://www.codeproject.com/KB/recipes/zigurat.aspx,但在 c.

谢谢

【问题讨论】:

    标签: c


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      制服:
      使用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 建议使用现有库。

      【讨论】:

      • 如果平台支持 C++11,那么新的、强大的随机数工具就可以使用。它已经支持 20 种常见的发行版。请参阅C++11 FAQ
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 2011-05-15
      • 2011-03-07
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多