Tutorial
FBMath
von nemored | Seite 5 von 5 |
Kombinatorik und Wahrscheinlichkeitsrechnung
Binomialkoeffizienten
Wie groß ist die Wahrscheinlichkeit, im Lotto "sechs Richtige" zu haben?
Die Lösung dieser Aufgabe läuft über die Laplace-Wahrscheinlichkeit, für die man zunächst die Anzahl aller Ziehungsmöglichkeiten benötigt. Da aus 49 Kugeln 6 ohne Zurücklegen gezogen werden, wobei die Reihenfolge keine Rolle spielt, ergeben sich
49! / ( 6! * (49 - 6)! ) Möglichkeiten
was dem Binomialkoeffizenten "6 aus 49" entspricht.
Fakultätsberechnungen auf UINTEGER-Basis werden bereits bei 13! = 6227020800 das Handtuch werfen. FBMath enthält zur Fakultätsberechnung die Funktion Fact(n), die mit DOUBLE-Werten rechnet. Damit können Fakultäten bis n=170 berechnet werden (allerdings natürlich nur in der Genauigkeit von DOUBLE).
Direkt mit den Fakultäten gerechnet, können so die Anzahl der Möglichkeiten bestimmt werden:
anzahl = Fact(49) / Fact(6) / Fact(49-6)
Auch wenn das hier ermittelte Ergebnis korrekt ist, sollte dennoch lieber eine andere Möglichkeit verwendet werden: Mit Binomial(n,k) wird der benötigte Binomialkoeffizient mit geringerem Aufwand berechnet.
anzahl = Binomial(49, 6)
Ein Vorteil dieser Methode ist, dass sich wesentlich höhere Binomialkoeffizienten berechnen lassen, als dies mit der Fakultät möglich wäre.
#include once "math.bi"
dim as integer n = 400, k = 3
dim as double nFact, kFact, nkFact, ergebnis
print "Berechne den Binomialkoeffizienten '" & k & " aus " & n & "'"
print
print "Berechnung mit Binomial(" & n & ", " & k & ")"
ergebnis = Binomial(n, k)
if MathErr then
print "Es ist ein Fehler aufgetreten!"
else
print "Ergebnis: " & ergebnis
end if
print
print "Berechnung mit Fact(" & n & ") / Fact(" & k & ") / Fact(" & n-k & ")"
nFact = Fact(n)
if MathErr then print "Bei der Berechnung von n! ist ein Fehler aufgetreten!" : end
kFact = Fact(k)
if MathErr then print "Bei der Berechnung von k! ist ein Fehler aufgetreten!" : end
nkFact = Fact(n-k)
if MathErr then print "Bei der Berechnung von (n-k)! ist ein Fehler aufgetreten!" : end
print "Ergebnis: " & nFact / kFact / nkFact
Während "3 aus 400" mit ein wenig Geschick selbst mit einem einfachen Taschenrechner schnell bestimmt werden kann, liegt die Berechnung von 400! bereits weit jenseits der berechenbaren Grenze.
Binomialverteilung
Die Binomialverteilung wird benötigt, wenn eine Reihe von gleichartigen, unabhängigen Zufallsexperimenten durchgeführt wird, bei denen es nur zwei mögliche Ergebnisse gibt (z. B. 'Erfolg' und 'Misserfolg'). Ein klassisches Beispiel ist das n-malige Werfen eines Würfels und das Zählen der dabei gefallenen Einser.
PBinom(n, p, k) berechnet die Wahrscheinlichkeit, dass bei einem n-fachen Ausführen eines Zufallsexperiment genau k-mal das Ergebnis 'Erfolg' erzielt wird, wobei ein 'Erfolg' die Wahrscheinlichkeit p besitzt.
Beispiel: Ein (Laplace-)Würfel wird 90 mal geworfen. Wie groß ist die Wahrscheinlichkeit, dass genau 15 mal eine Eins geworfen wird?
Wahrscheinlichkeit = PBinom(90, 1/6, 15)
Das folgende Beispiel stellt die Binomialverteilung für diese Parameter grafisch dar.
#include once "math.bi"
dim as integer n = 90 ' Anzahl der Würfe
dim as double p = 1 / 6 ' Erfolgswahrscheinlichkeit
dim as integer fensterB = 602, fensterH = 400 ' Fenstermaße
screenres fensterB, fensterH
' errechnete Maße:
' Breite für den Balken
dim as integer balkenB = fensterB \ (n+1)
' Streckungsfaktor: der größte Wert ergibt sich bei k = n*p
dim as integer streck = int(0.9*fensterH / PBinom(n, p, int(n*p)))
dim as double w
for k as integer = 0 to n
' berechne die Wahrscheinlichkeit dafür, dass genau k Einser fallen
w = PBinom(n, p, k)
'grafische Darstellung
line (k*balkenB, fensterH-1)-step(balkenB-1, - w*streck),, b
next
sleep
FBinom(n, p, k) berechnet die Wahrscheinlichkeit für 'höchstens k Treffer'. Die Wahrscheinlichkeit, bei 90 Würfen mit einem (Laplace-)Würfel bis zu 15 mal die Eins zu werfen, beträgt
Wahrscheinlichkeit = FBinom(90, 1/6, 15)
Um die Wahrscheinlichkeit für 'mindestens k Treffer' zu bestimmen, muss der Weg über das Gegenereignis gegangen werden:
P("mindestens k Treffer") = 1 - P("höchstens k-1 Treffer")
Also beträgt die Wahrscheinlichkeit dafür, mindestens 15 mal die Eins zu werfen
Wahrscheinlichkeit = 1 - FBinom(90, 1/6, 14)
(Das Tutorial wird noch erweitert.)
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|