Расчет распределения Пуассона в С - PullRequest
2 голосов
/ 29 июня 2009

Мне нужна функция C для расчета распределения Пуассона для значений k до 720. Мне нужно очень эффективное решение.

Ответы [ 4 ]

6 голосов
/ 29 июня 2009

дать попробовать GSL : gsl_ran_poisson_pdf

3 голосов
/ 11 марта 2013

пуассоновский генератор случайных чисел

int poissonRandom(double expectedValue) {
  int n = 0; //counter of iteration
  double limit; 
  double x;  //pseudo random number
  limit = exp(-expectedValue);
  x = rand() / INT_MAX; 
  while (x > limit) {
    n++;
    x *= rand() / INT_MAX;
  }
  return n;
}

Полагаю, я опаздываю на ваше срочное требование.

1 голос
/ 29 июня 2009

Если вы хотите вычислить это самостоятельно вместо использования библиотеки Вы можете рассчитать его по формуле .. e ^ k * e ^ (- лямбда) / k!
Вы можете использовать log (n!) = log (n) + log (n-1!) и динамическое программирование

0 голосов
/ 26 ноября 2016

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

double poisson( int k, double mean ) { 
  double p = std::exp(-mean);
  double f = 1;
  for ( int i=0 ; i<k ; i++ ) f *= mean/(i+1);     
  return p*f;
}
...