2009-06-29 6 views
2

Ich brauche eine C-Funktion, um die Poisson-Verteilung für Werte von k bis 720 zu berechnen. Ich brauche eine hocheffiziente Lösung.Berechnung der Poisson-Verteilung in C

+8

Dies ist kein RentACoder, und ein Mangel an Planung Ihrerseits stellt keinen Notfall für uns dar. Sie sollten sich zumindest minimal anstrengen (und uns sagen, was es war), anstatt nur Forderungen zu stellen. – paxdiablo

Antwort

1

Wenn Sie es selbst, anstatt der Verwendung einer Bibliothek berechnen möchten Sie es unter Verwendung der Formel berechnet werden kann .. e^k * e^(- Lambda)/k!
können Sie log (n!) Verwenden = log (n) + log (n-1!) Und die dynamische Programmierung

3

Poisson Zufallsgenerator

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

Ich glaube, ich ziemlich spät für Ihre dringende bin Nachfrage.

+0

Dies wurde auch mit anderen diskutiert unter: https://en.wikipedia.org/wiki/Poisson_distribution#Generating_Poisson-distributed_random_variables – plasmacel

0

Ich denke, das ist viel zu spät für die ursprüngliche Anfrage, aber ich denke, einige der Antworten verfehlen den Punkt - ich glaube nicht, dass er Zufallszahlen aus einer Verteilung generieren will, aber die Verteilung selbst will. Hier ist eine Funktion, dies zu tun Vermeidung der Berechnung von Faktoren, die groß werden können.

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