Gamma在C ++中分布随机变量

时间:2011-03-31 12:39:04

标签: c++ boost random gamma-distribution

在C ++中获取gamma分布式随机变量的最简单方法是什么? Boost似乎有这个功能,但我不清楚如何使用它。

3 个答案:

答案 0 :(得分:7)

这很简单:

boost::mt19937 rng;
boost::gamma_distribution<> pdf(alpha);
boost::variate_generator<boost::mt19937&, boost::gamma_distribution<> >
    generator(rng, pdf);

构造一个随机数生成器和一个gamma distribution并将它们粘合在一起形成一个可用的生成器。现在,您可以通过调用generator来创建随机数。

答案 1 :(得分:6)

以下是在C ++ 11中的使用方法:

#include <random>
#include <iostream>

int main()
{
    typedef std::mt19937 G;
    typedef std::gamma_distribution<> D;
    G g;  // seed if you want with integral argument
    double k = .5;      // http://en.wikipedia.org/wiki/Gamma_distribution
    double theta = 2.0;
    D d(k, theta);
    std::cout << d(g) << '\n';
}

您的编译器可能支持也可能不支持<random>。 Boost random最近刚被修改为符合std :: syntax,但我不确定该修改是否实际上已经发布(或者仍然只是在boost主干上)。

答案 2 :(得分:1)

看起来Gamma Distribution in Boost有一些代码可以执行您想要的操作。您可能遗失的位是boost::variate_generator