математика — определить и использовать дискретную функцию плотности вероятности в переполнении стека

Я хочу определить конкретную функцию плотности вероятности (pdf) для n чисел в C ++, а затем выбрать некоторые из них позже в моем коде.

мой pdf: P (x) = (1 / logn) * f (x) ^ (- 2)

f (x) имеет детерминированное число, которое уже определено для каждого x ранее в моем коде.

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

мой начальный код, который я нашел:

  for(int x=1;x<n+1;x++){
// I calculate all f(x) and therefore P(x) here
}
std::default_random_engine generator;
std::discrete_distribution<int> distribution { .. not sure how to use P(x)s here .. };

int prob[n]={};

for (int i=0; i<n; ++i) {
int number = distribution(generator);
++prob[number];
}

Спасибо заранее.

2

Решение

Теперь вы можете построить вектор с весами:

std::vector< double> weights( n);
for( int i = 0; i < n; ++i) {
weights[i] = pdf( i + 1);
}

std::default_random_engine generator;
std::discrete_distribution<int> distribution( weights.begin(), weights.end()) ;

int prob[n]={};

for ( int i=0; i<n; ++i) {
int number = distribution( generator);
++prob[number];
}

Это сгенерирует, начиная с 0, так работает discrete_distribution, но вы можете без потери корректности предположить, что значения рассчитываются для диапазона 1, ..., n (веса рассчитаны для 1, ..., n).

пример

3

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector