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>ます。ブーストランダムは、std :: Syntaxに準拠するように最近変更されましたが、その変更が実際にリリースされているかどうか(または、ブーストトランク上にあるかどうか)はわかりません。

于 2011-03-31T13:06:27.770 に答える
1

Boostのガンマ分布にはあなたが望むことをするいくつかのコードがあるようです。あなたがおそらく見逃しているビットはですboost::variate_generator

于 2011-03-31T12:44:30.900 に答える