5

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

4

3 回答 3

8

这很简单:

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

构造一个随机数生成器和一个伽马分布,并将它们粘合在一起成为一个可用的生成器。现在您可以通过调用generator.

于 2011-03-31T12:42:59.530 回答
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 主干上)。

于 2011-03-31T13:06:27.770 回答
1

看起来Boost 中的 Gamma Distribution有一些代码可以满足您的需求。您可能缺少的一点是boost::variate_generator.

于 2011-03-31T12:44:30.900 回答