Генерация полиномиального распределения

Я пытаюсь написать / найти фрагмент кода / функцию, которая возвращает полиномиальное распределение по числу и массиву вероятности, скажем, функцию:

Mult(N, pp[])

Например, для pp = {0.3, 0.2, 0.5} (pp может иметь переменные размеры, скажем, от 2 до 10 элементов).

Mult(10, pp[])

давая результаты как:

1,1,8
3,1,6
2,3,5

когда вызывается в разных случаях.

Я могу думать о чем-то вроде следующего, используя gsl
но когда неоднократно вызывается в разных случаях, это не хорошо. Я понимаю, что фрагмент кода, который я привел ниже, не очень хороший, но жду предложений, чтобы сделать его лучше. Благодарю.

std::vector<int> Mult(int numb, std::vector<double> prob_array)
{
const gsl_rng_type * T2;
gsl_rng * r2;
srand(); // srand(time(NULL));

unsigned int Seed2 = 1234567; // rand();
gsl_rng_env_setup();

T2 = gsl_rng_default;
r2 = gsl_rng_alloc (T2);
gsl_rng_set (r2, Seed2);

size_t k = prob_array.size();

double ppp[k]; // Probability array

for(int ii=0; ii<prob_array.size(); ++ii) {
ppp[ii] =  prob_array[ii];
}

unsigned int mult_op[k];
gsl_ran_multinomial(r2, k, numb, ppp, mult_op);
std::vector<int> multi;
for(int ii=0; ii<kk; ++ii ){
multi.push_back(mult_op[ii]);
}
return multi;
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]