Wie kann ich effizient berechnet die binomiale kumulative Verteilungsfunktion?

Sagen wir mal so, ich weiß, die Wahrscheinlichkeit eines "Erfolg" ist P. ich den test ausführen, N mal, und ich sehe S Erfolge. Der test ist vergleichbar mit dem werfen einer ungleich gewichteten Münze (vielleicht Köpfe ist ein Erfolg, tails ist ein Fehler).

Ich möchte wissen, die Ungefähre Wahrscheinlichkeit des Sehens entweder S Erfolge, oder eine Reihe von erfolgen weniger wahrscheinlich als S-Erfolge.

So zum Beispiel, wenn P ist 0,3, N-100 und ich bekommen, 20 Erfolge, ich bin auf der Suche nach der Wahrscheinlichkeit 20 oder weniger Erfolge.

Wenn auf der anderen hatte, P ist 0,3, N 100, und ich bekomme 40 Erfolge, ich bin auf der Suche nach der Wahrscheinlichkeit, 40 unsere weitere Erfolge.

Ich bin mir bewusst, dass dieses problem bezieht sich auf das finden der Fläche unter einer binomialen Kurve, jedoch:

  1. Meine Mathe-fu ist nicht bis zu der Aufgabe der übersetzung dieser Kenntnisse in effizienten code
  2. Ich verstehe zwar einer binomialen Kurve geben würde, ein exaktes Ergebnis, ich habe den Eindruck, es wäre grundsätzlich ineffizient. Eine schnelle Methode zum berechnen einer ungefähren Ergebnis, würde genügen.

Ich sollte betonen, dass diese Berechnung muss schnell sein, und sollte idealerweise definierbar mit standard-64-oder 128-bit-floating-point-Berechnung.

Ich bin auf der Suche nach einer Funktion, P, S, und N - und gibt eine Wahrscheinlichkeit. Als ich bin mehr vertraut mit dem code, als die mathematische Schreibweise ist, würde ich es vorziehen, dass alle Antworten beschäftigen pseudo-code oder code.

InformationsquelleAutor der Frage sanity | 2009-07-08

Schreibe einen Kommentar