0

我正在尝试使用 Boost 1.5 中的 Gamma 分布。现在我希望ktheta的值分别为 4 和 0.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 回答