C ++でガンマ分布確率変数を取得する最も簡単な方法は何ですか?Boostにはこの機能があるようですが、使い方がわかりません。
3460 次
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 に答える