2009-06-29 5 views
2

J'ai besoin d'une fonction C pour calculer la distribution de Poisson pour les valeurs de k jusqu'à 720. J'ai besoin d'une solution très efficace.Calcul de la distribution de Poisson en C

+8

Ceci n'est pas RentACoder, et le manque de planification de votre part ne constitue pas une urgence de notre part. Vous êtes censé au moins faire un effort minimal (et nous dire de quoi il s'agit) plutôt que de simplement faire des demandes. – paxdiablo

Répondre

1

Si vous voulez calculer vous-même au lieu d'utiliser une bibliothèque Vous pouvez le calculer en utilisant la formule .. e^k * e^(- lambda)/k!
vous pouvez utiliser le log (n!) = Log (n) + log (n-1!) Et la programmation dynamique

3

Poisson générateur aléatoire

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

Je suppose que je suis assez en retard pour votre urgence demande.

+0

Cela a également discuté avec d'autres à: https://en.wikipedia.org/wiki/Poisson_distribution#Generating_Poisson-distributed_random_variables – plasmacel

0

Je suppose que c'est trop tard pour la demande initiale, mais je pense que certaines réponses manquent le point - je ne pense pas qu'il souhaite générer des nombres aléatoires à partir d'une distribution, mais veut la distribution elle-même. Voici une fonction pour faire cela en évitant le calcul de factorielles qui peuvent devenir grandes.

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