2015-04-02 3 views
1

Я хочу генерировать случайные числа, используя распределение weibull в C++. Может ли кто-нибудь дать мне несколько советов?Как использовать библиотеку распространения boost weibull для генерации случайных чисел?

Благодаря

+1

Есть слишком много возможных ответов, или хорошие ответы будут слишком длинными для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких абзацах. – bitoiu

ответ

5

Я думаю, что это может ответить на ваш вопрос: c++ References

// weibull_distribution 
#include <iostream> 
#include <random> 

int main() 
{ 
    const int nrolls=10000; // number of experiments 
    const int nstars=100; // maximum number of stars to distribute 

    std::default_random_engine generator; 
    std::weibull_distribution<double> distribution(2.0,4.0); 

    int p[10]={}; 

    for (int i=0; i<nrolls; ++i) { 
    double number = distribution(generator); 
    if (number<10) ++p[int(number)]; 
    } 

    std::cout << "weibull_distribution (2.0,4.0):" << std::endl; 

    for (int i=0; i<10; ++i) { 
    std::cout << i << "-" << (i+1) << ": "; 
    std::cout << std::string(p[i]*nstars/nrolls,'*') << std::endl; 
    } 

    return 0; 
} 

Pssible выход: weibull_distribution (2.0,4.0):

0-1: ****** 
1-2: *************** 
2-3: ********************* 
3-4: ******************** 
4-5: *************** 
5-6: *********** 
6-7: ***** 
7-8: ** 
8-9: * 
9-10: 
0

Вот решение, используя подталкивание Библиотека:

#include <iostream> 
using namespace std; 

#include <boost/random/mersenne_twister.hpp>  // For boost::mt19937 
#include <boost/random/variate_generator.hpp> 
#include <boost/random/weibull_distribution.hpp> 

#include <iostream> 
using namespace std; 

int main() { 
    // Choose precision 
    cout.precision(10); 
    cout << endl; 

    // To get random generated numbers: 
    boost::mt19937 rng(12); 
    double shape = 3.0; 
    double scale = 0.5; 
    boost::random::weibull_distribution<> myWeibull2(shape, scale); 
    boost::random::variate_generator<boost::mt19937&, boost::random::weibull_distribution<> > rand_Weibull(rng, myWeibull2); 

    cout << "Random numbers generated from a Weibull distribution:" << endl; 
    double rn; 
    for (int i=0; i < 10; ++i) 
    { 
     rn = rand_Weibull(); 
     cout << rn << endl; 
    } 
    cout << endl; 

    return 0; 
} 
Смежные вопросы