0

Boost1.5のガンマ分布を使用しようとしています。ここで、 kthetaの値をそれぞれ4と.5にします。しかし、 theta <1の値を設定すると、コンパイルエラーが発生します。

/usr/local/include/boost/random/gamma_distribution.hpp:118: boost::random::gamma_distribution<RealType>::gamma_distribution(const RealType&, const RealType&) [with RealType = double]: Assertion `_beta > result_type(0)' failed.

同じことを回避する方法はありますか?

4

1 に答える 1

0

パラメータを正しく配布関数に渡していないようです。C++11 バージョンは次のとおりです (Boost は同等に機能します)。

#include <random>
#include <iostream>
int main()
{   
    std::random_device rd;
    std::mt19937 gen(rd());
    double alpha = 4.0;
    double theta = 0.5;
    std::gamma_distribution<> gamma(alpha, 1.0 / theta);
    auto value = gamma(gen);

    // May print: 6.94045.
    std::cout << value << std::endl;

    return 0;
}

パラメータ化に注意してください。

  • alphaと同じですk
  • beta逆スケール パラメータであり、 と同じ1 / thetaです。
于 2012-08-15T19:21:56.603 に答える