2010-03-26 5 views
2

Я пытаюсь использовать дистрибутив Gamma из boost :: math, но похоже, что использовать его с boost :: variate_generator невозможно. Может ли кто-нибудь подтвердить это? Или есть способ использовать его.Gamma Distribution in Boost

Я обнаружил, что есть недопустимый boost :: gamma_distribution, который, вероятно, может быть использован, но он позволяет выбирать только альфа-параметр из дистрибутива, а не из бета-версии.

Спасибо!

ответ

4

Как указано в this link, вы можете расширить однопараметрическое гамма-распределение Boost (или TR1), просто умножив выход rng на желаемый масштаб.

Ниже приведен пример кода, который использует variate_generator рисовать номера из гамма-распределения, параметризовано средним и дисперсией:

#include <boost/random.hpp> 
#include <boost/random/gamma_distribution.hpp> 

double rgamma(double mean, double variance, boost::mt19937& rng) { 
    const double shape = (mean*mean)/variance; 
    double scale = variance/mean; 

    boost::gamma_distribution<> gd(shape); 
    boost::variate_generator<boost::mt19937&,boost::gamma_distribution<> > var_gamma(rng, gd); 

    return scale*var_gamma(); 
} 
+0

это хорошо, вы можете также получить обратную гамма из этого – pyCthon