2009-06-29 1 views
2

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

+8

Это не RentACoder, и отсутствие планирования с вашей стороны не представляет собой чрезвычайную ситуацию с нашей стороны. Вы должны хотя бы приложить минимальные усилия (и сказать нам, что это было), а не просто предъявлять требования. – paxdiablo

ответ

1

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

3

Пуассона Генератор случайных

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; 
} 

Я предполагаю, что я довольно поздно для вашего настоятельная спрос.

+0

Это также обсуждалось с другими: https://en.wikipedia.org/wiki/Poisson_distribution#Generating_Poisson-distributed_random_variables – plasmacel

0

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

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; 
}