Hallo,
ich schreibe gerade an einem Script, welches mithilfe von Fakultät (n über k) die Pfade einer Bernoullikette berechnen soll.
Ich lasse mir per POST folgendes liefern:
n = Stufen -> hier 5
k = Erfolge -> hier 2
Jetzt möchte ich gerne die Pfade ausrechnen, die bei einem Baumdiagramm zu zeichnen wären.
Ich würde also im taschenrechner folgendes rechnen: 5C2 = 10 Pfade
Rechnung:
P(k Erfolge) (n über k)*p^k*(1-p)^(n-k)
P(2 Erfolge) (5 über 2)*2,5^2*(1-2,5)^(5-2)
oder ist das nun total falsch?
Mein Ziel soll sein, die Anzahl der Pfade zu bestimmen indem im die Werte n-Strufe und k-Erfolg angebe.
Wer kann mir dabei helfen?
Vielen Dank schonmal
Toasterfraktion
Seite 1 von 1
Fakultät Berechnen! Nck ...con Bernoulliketten
Anzeige
#2
geschrieben 08. April 2008 - 22:37
edit: habe nun dieses hier geprüft:
5!/2!(5-2)! = 10
wobei
5! = 1*2*3*4*5= 120
und
2! = 1*2 = 2
ist.
nur wie rechne ich denn
(5-2)! = ?
aus?
Wenn ich das erstmal kapiert habe, möchte ich das dann in eine Funktion einbetten, die mit Variablen arbeitet.
5!/2!(5-2)! = 10
wobei
5! = 1*2*3*4*5= 120
und
2! = 1*2 = 2
ist.
nur wie rechne ich denn
(5-2)! = ?
aus?
Wenn ich das erstmal kapiert habe, möchte ich das dann in eine Funktion einbetten, die mit Variablen arbeitet.
Dieser Beitrag wurde von Toasterfraktion bearbeitet: 08. April 2008 - 22:38
#3
geschrieben 08. April 2008 - 22:41
Also ich bin schon länger aus der Schule aber ich würde erst die Klammer ausrechnen - also 3 und daraus die Fak. berechnen
Gruß Slasher2k
Gruß Slasher2k
#4
geschrieben 08. April 2008 - 22:45
Okay da hast du recht, hätte ich auch selber drauf kommen können^^... nur wie bekomme ich das nun in eine Funktion hinein?
#5
geschrieben 08. April 2008 - 22:56
Also wenn PHP nicht selber so schlau ist und die Klammer berücksichtigt wirst du - wenn ich mir das jetzt mal groß überlege - wohl den String analysieren müssen. Sprich: strstr, str_replace
Nun weiß ich nicht wie dein Script im Ganzen aufgebaut ist - als wie machst du die Eingaben, etc.
Wir können uns ja morgen nochmal damit befassen - will jetzt erstmal schlafen :-)
Gruß Slasher2k
Nun weiß ich nicht wie dein Script im Ganzen aufgebaut ist - als wie machst du die Eingaben, etc.
Wir können uns ja morgen nochmal damit befassen - will jetzt erstmal schlafen :-)
Gruß Slasher2k
#6
geschrieben 09. April 2008 - 11:29
Hi,
also die Formeln sind im allgemeinen alle korrekt, außer
da es natürlich keine Wahrscheinlichkeit mit dem Wert 2,5 gibt
Und wie bereits erwähnt wurde, (5-2)! = 3! = 6.
Ich hab' kurz mal Funktionen zur Berechnung der Fakultät und von Binomialkoeffizienten erstellt. Damit du Berechnungen mit großen Zahlen durchführen kannst (wie man sie in Tafelwerken findet), habe ich eine Methode mit BC-Math mit angegeben. Ich habe die Funktionen gleich im Quelltext kommentiert, damit ich hier nicht mehr viel dazu sagen muss. Wenn man PHP und die mathematischen Grundlagen einigermaßen kann, dann dürfte das alles leicht nachvollziehbar sein.
Um die fehlerfreie Funtion zu überprüfen, kannst du hier einige Fakultäten nachprüfen: http://factorielle.f...r/index_en.html
Gleiches kannst du auf der Seite von Arndt Brünner auch für die Binomialkoeffizientenberechnung prüfen: http://www.arndt-bru...s/binkoeff1.htm
Die Implementierung des Bernoulli-Prozesses dürfte nun kein Problem mehr darstellen. Das einzige was beachtet werden muss, ist dass man für die BC-Math Variante wieder die BC-Funktionen verwendet, also auch bcpow() statt pow(), usw.
Ich hoffe damit kommst du weiter, ansonsten helfe ich gerne weiter.
Gruß,
Stefan
P.S. Keine Garantie, dass meine Funktionen in jedem Fall korrekt arbeiten.
also die Formeln sind im allgemeinen alle korrekt, außer
Toasterfraktion sagte:
P(2 Erfolge) (5 über 2)*2,5^2*(1-2,5)^(5-2)
da es natürlich keine Wahrscheinlichkeit mit dem Wert 2,5 gibt
Und wie bereits erwähnt wurde, (5-2)! = 3! = 6.
Ich hab' kurz mal Funktionen zur Berechnung der Fakultät und von Binomialkoeffizienten erstellt. Damit du Berechnungen mit großen Zahlen durchführen kannst (wie man sie in Tafelwerken findet), habe ich eine Methode mit BC-Math mit angegeben. Ich habe die Funktionen gleich im Quelltext kommentiert, damit ich hier nicht mehr viel dazu sagen muss. Wenn man PHP und die mathematischen Grundlagen einigermaßen kann, dann dürfte das alles leicht nachvollziehbar sein.
<?php /* * Berechnung von Fakultät und Binomialkoeffizienten * * Autor: Stefan Diewald ([email protected]) * Datum: 09. April 2008 */ $fak = 150; echo '<strong>'.$fak.'!</strong><br />'; echo fakultaet($fak); echo '<br />'; echo '<strong>'.$fak.'! mit BC-Math</strong><br />'; echo bc_fakultaet($fak); echo '<br /><br />'; echo '<strong>(2.5 über 2)</strong><br />'; echo binKoeff(2.5,2); echo '<br />'; echo '<strong>(49 über 6)</strong><br />'; echo binKoeff(49,6); echo '<br /><br />'; echo '<strong>(100 über 49)</strong><br />'; echo binKoeff(100,49); echo '<br />'; echo '<strong>(100 über 49) mit BC-Math</strong><br />'; echo bc_binKoeff(100,49); /* * int binKoeff(int $n, int $k) - Berechnet den Binomialkoeffizient (n über k) */ function binKoeff($n, $k) { if ($n < $k) return -1; // nicht definiert if ($k == 0) return 1; // ist immer 1, Rechnung ersparen if ($k < 0) return 0; // ist so definiert if ($n == $k) return 1; // ist auch immer 1, Rechnung ersparen $low = $n-$k+1; // in Fakultät-Schreibweise kann man im Zähler (n-k)! kürzen, daher geht Multiplikation nur bie n-k+1 for ($zaehler = $low; $n > $low; $zaehler *= $n--); // n*(n-1)*...*(n-k+1) return $zaehler / fakultaet($k); // n*(n-1)*...*(n-k+1) / k! } /* * string binKoeff(int/string $n, int/string $k) - Berechnet den Binomialkoeffizient (n über k) mit Hilfe von BC-Math */ function bc_binKoeff($n, $k) { if ($n < $k) return '-1'; // nicht definiert if ($k == 0) return '1'; // ist immer 1, Rechnung ersparen if ($k < 0) return '0'; // ist so definiert if ($n == $k) return '1'; // ist auch immer 1, Rechnung ersparen $low = bcadd(bcsub($n,$k),1); // in Fakultät-Schreibweise kann man im Zähler (n-k)! kürzen, daher geht Multiplikation nur bie n-k+1 // n*(n-1)*...*(n-k+1) for ($zaehler = $low; bccomp($n,$low) == 1;) { $zaehler = bcmul($zaehler,$n); $n = bcsub($n,'1'); } return bcdiv($zaehler,bc_fakultaet($k)); // n*(n-1)*...*(n-k+1) / k! } /* * int fakultaet(int $int) - Berechnet die Fakultät int! */ function fakultaet($int) { if ($int < 0) return -1; // nicht definiert if ($int < 2) return 1; // 0! = 1! = 1 for ($fak = 2; $int-1 > 1; $fak *= $int--); // n*(n-1)*...*2 return $fak; }; /* * string bc_fakultaet(int/string $int) - Berechnet die Fakultät int! mit Hilfe von BC-Math */ function bc_fakultaet($int) { if ($int < 0) return '-1'; // nicht definiert if ($int < 2) return '1'; // 0! = 1! = 1 // n*(n-1)*...*2 for ($fak = '2'; bccomp(bcsub($int,'1'),'1') == 1;) { $fak = bcmul($fak,$int); $int = bcsub($int,'1'); } return $fak; } ?>oder auch hier: http://pastebin.com/f5d049c07
Um die fehlerfreie Funtion zu überprüfen, kannst du hier einige Fakultäten nachprüfen: http://factorielle.f...r/index_en.html
Gleiches kannst du auf der Seite von Arndt Brünner auch für die Binomialkoeffizientenberechnung prüfen: http://www.arndt-bru...s/binkoeff1.htm
Die Implementierung des Bernoulli-Prozesses dürfte nun kein Problem mehr darstellen. Das einzige was beachtet werden muss, ist dass man für die BC-Math Variante wieder die BC-Funktionen verwendet, also auch bcpow() statt pow(), usw.
Ich hoffe damit kommst du weiter, ansonsten helfe ich gerne weiter.
Gruß,
Stefan
P.S. Keine Garantie, dass meine Funktionen in jedem Fall korrekt arbeiten.
Dieser Beitrag wurde von Diewie bearbeitet: 09. April 2008 - 11:40
#7
geschrieben 09. April 2008 - 18:40
Also so gern wie ich dir helfen würde, aber diese Mathematik ist mir dann doch zu heftig. Da fällt mir wieder ein warum ich damals meine Prüfungen in der Vektorrechnung gemacht habe. Also wenn du dein eigenes Script verstehst hast du meine tiefste Anerkennung :-)
Gruß Slasher2k
Gruß Slasher2k
#8
geschrieben 09. April 2008 - 22:31
Ich verstehs :-P
und damit nochmal vielen vielen Dank an Diewie!!!
Haste gut gemacht. :-)
und damit nochmal vielen vielen Dank an Diewie!!!
Haste gut gemacht. :-)
Thema verteilen:
Seite 1 von 1