2011-03-31 222 views

回答

7

這是非常簡單的:

boost::mt19937 rng; 
boost::gamma_distribution<> pdf(alpha); 
boost::variate_generator<boost::mt19937&, boost::gamma_distribution<> > 
    generator(rng, pdf); 

一起構造一個隨機數發生器和gamma distribution和膠水他們到一個可用的發電機。現在您可以通過調用generator來創建隨機數字。

+0

測試版呢? – pyCthon 2011-12-07 03:56:37

+0

@stonybrooknick不幸的是,[Boost似乎沒有它](http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random/reference.html#boost_random.reference.distributions),但它一旦你看看其他發行版是如何實現的以及PDF是如何定義的,就不應該太難實現。 – 2011-12-07 07:26:38

+0

@stonybrooknick:通過「測試版」,您可能是一個比例參數或比率參數。在第一種情況下,將變量乘以beta,否則將它們分開。 – 2012-01-08 15:34:11

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>。 Boost隨機最近剛剛被修改爲符合std ::語法,但我不確定該修改是否已經實際發佈(或者仍然只是在boost主幹上)。