Мне нужна функция C для вычисления распределения Пуассона для значений k до 720. Мне нужно высокоэффективное решение.Расчет распределения Пуассона в C
ответ
дать попробовать GSL: gsl_ran_poisson_pdf
Если вы хотите, чтобы рассчитать его самостоятельно, вместо того, чтобы использовать библиотеку можно рассчитать его, используя формулу .. е^к * е^(- лямбда)/к!
вы можете использовать журнал (п!) = Журнал (п) + журнал (п-1!) И динамическое программирование
Пуассона Генератор случайных
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;
}
Я предполагаю, что я довольно поздно для вашего настоятельная спрос.
Это также обсуждалось с другими: https://en.wikipedia.org/wiki/Poisson_distribution#Generating_Poisson-distributed_random_variables – plasmacel
Я думаю, что это слишком поздно для первоначального запроса, но я думаю, что некоторые из ответов не совпадают с точкой - я не думаю, что он хочет генерировать случайные числа из дистрибутива, но хочет самого распространения. Вот функция, чтобы сделать это , избегая вычисления факториалов, которые могут стать большими.
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;
}
Это не RentACoder, и отсутствие планирования с вашей стороны не представляет собой чрезвычайную ситуацию с нашей стороны. Вы должны хотя бы приложить минимальные усилия (и сказать нам, что это было), а не просто предъявлять требования. – paxdiablo