C++ 中的伽玛分布随机变量

发布于 2024-10-27 20:17:06 字数 59 浏览 2 评论 0原文

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

What is the easiest way to get a gamma distributed random variable in C++? Boost seems to have this functionality, but it is not clear for me how to use it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

再见回来 2024-11-03 20:17:06

这非常简单:

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

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

It’s pretty straightforward:

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

Constructs a random number generator and a gamma distribution and glues them together into a usable generator. Now you can create random numbers by invoking the generator.

香橙ぽ 2024-11-03 20:17:06

以下是在 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';
}

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

Here is how you do it in 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';
}

Your compiler may or may not yet support <random>. Boost random has just recently been modified to conform to the std::syntax, but I'm not sure if that modification has actually been released yet (or is still just on the boost trunk).

余生共白头 2024-11-03 20:17:06

看起来Boost中的Gamma Distribution有一些代码可以做你想要的事情。您可能缺少的一点是 boost::variate_generator

Looks like Gamma Distribution in Boost has some code that will do what you want. The bit you're probably missing is boost::variate_generator.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文