Binomialverteilung
Rechnet zur Binomialverteilung wahlweise Wahrscheinlichkeit, Möglichkeiten, Erwartungswert oder Standardabweichung aus — auf Wunsch mit eingesetzten Zahlen in der Formel.
Die Binomialverteilung beantwortet Fragen wie: Wie wahrscheinlich ist es, bei 10 Münzwürfen genau 4-mal Kopf zu werfen? Mit diesem Rechner, den unser User Super_Mario eingeschickt hat, könnt ihr zu einem solchen Zufallsexperiment vier Größen ausrechnen lassen: die Wahrscheinlichkeit selbst, die Anzahl der Möglichkeiten (den Binomialkoeffizienten), den Erwartungswert und die Standardabweichung.
Tragt dazu die Anzahl der Elemente n ein (wie oft das Experiment durchgeführt wird), die Anzahl der Wege k (wie oft der gewünschte Ausgang eintreten soll) und die Wahrscheinlichkeit p für einen einzelnen Treffer als Wert zwischen 0 und 1. Wählt dann aus der Liste, was berechnet werden soll, und klickt auf „Verteilung berechnen". Das Script zeigt euch neben dem Ergebnis auch die verwendete Formel an — mit dem Häkchen „Zahlen in Formel einsetzen" erscheinen darin statt der Formelzeichen eure eingegebenen Werte. Das Münzwurf-Beispiel ist bereits vorausgefüllt.
Die Binomialverteilung gehört zu den wichtigsten Verteilungen der Wahrscheinlichkeitsrechnung: Sie beschreibt, wie oft ein Ereignis mit fester Trefferwahrscheinlichkeit bei mehrfacher, unabhängiger Wiederholung eintritt — vom Münzwurf über Würfelexperimente bis zur Qualitätskontrolle. Wer tiefer einsteigen will, findet bei Wikipedia mehr dazu.
Die Binomialkoeffizienten, die hier als „Möglichkeiten" auftauchen, stecken übrigens auch im Pascalschen Dreieck — jede Zeile darin besteht genau aus ihnen. Und weil in ihrer Formel Fakultäten vorkommen, passt auch unser Script Fakultät berechnen gut dazu. Der eigentliche Code stammt von Valentin Hammer.
p ist die Wahrscheinlichkeit eines einzelnen Treffers, als Wert zwischen 0 und 1 (z. B. 0,5 für den Münzwurf).
So funktioniert das Script
Das Script hat vier Abschnitte: Es liest die Eingaben und sichert sie gegen unsinnige Werte ab, rechnet je nach gewählter Formel das Ergebnis aus, glättet typische Fließkomma-Rundungsfehler und baut zum Schluss die Anzeige aus Formel und Ergebnis zusammen. Alles steckt in einer sofort ausgeführten Funktion, damit die Variablennamen nicht mit anderen Scripts auf der Seite kollidieren.
if (isNaN(n) || n < 0) n = 0;
if (isNaN(k) || k < 0) k = 0;
if (isNaN(p) || p < 0) p = 0;
else if (p > 1) p = 1;
if (k > n) k = n;
Nach dem Einlesen mit parseInt() (ganze Zahlen) und parseFloat() (Kommazahlen, ein deutsches Komma wird vorher per replace(",", ".") in einen Punkt getauscht) werden die Werte in sinnvolle Grenzen gezwungen: Negative oder leere Eingaben zählen als 0, eine Wahrscheinlichkeit über 1 wird auf 1 gestutzt, und k darf nie größer sein als n — man kann ja nicht öfter treffen, als man versucht. isNaN() steht für „is Not a Number" und erkennt ungültige Eingaben.
// Binomialkoeffizient "n über k"
for (let i = 1; i <= k; i++) {
ergebnis *= (n - i + 1) / i;
}
Das ist das Herzstück: Der Binomialkoeffizient „n über k" zählt, auf wie viele Arten man k Treffer auf n Versuche verteilen kann. Statt der Fakultäts-Formel n! / (k! · (n−k)!) — die schon bei mittleren Zahlen riesige Zwischenwerte erzeugt — multipliziert die Schleife Bruch für Bruch: n/1 · (n−1)/2 · (n−2)/3 …, insgesamt k Faktoren. Das liefert dasselbe Ergebnis, bleibt aber viel länger im rechenbaren Bereich.
if (formel < 1) {
ergebnis *= Math.pow(p, k) * Math.pow(q, n - k);
}
Für die Wahrscheinlichkeit wird der Koeffizient noch mit p hoch k (jeder Treffer) und der Gegenwahrscheinlichkeit q = 1−p hoch n−k (jede Niete) multipliziert — die klassische Bernoulli-Formel. Math.pow(a, b) ist dabei einfach „a hoch b". Die Gegenwahrscheinlichkeit wird weiter oben übrigens über einen Zehnerpotenz-Trick berechnet, damit aus 1 − 0.3 exakt 0.7 wird und nicht 0.7000000000000001, wie es bei Fließkommazahlen sonst leicht passiert.
const drift = Math.max(String(ergebnis).indexOf("00000000"), String(ergebnis).indexOf("99999999"));
if (drift > -1) {
ergebnis = Math.round(ergebnis * Math.pow(10, drift - 2)) / Math.pow(10, drift - 2);
}
Trotzdem können sich beim Rechnen kleine „Schleppfehler" ansammeln, erkennbar an langen Ketten aus Nullen oder Neunen mitten in der Zahl. Das Script sucht per indexOf() nach solchen Ketten und rundet die Zahl an dieser Stelle sauber ab. Die Hilfsfunktion hochzahl() kümmert sich zusätzlich um sehr große Ergebnisse: Aus JavaScripts Exponentenschreibweise 1.2e+34 macht sie das lesbare 1.2×10<sup>34</sup>.
let zN = "n", zK = "k", zP = "p", zQ = "(1-p)", zNK = "n-k";
if (einsetzen) {
zN = hochzahl(n);
zK = hochzahl(k);
...
}
Für die Formel-Anzeige gibt es zwei Sätze von Platzhaltern: Normalerweise erscheinen die Formelzeichen n, k und p; ist das Häkchen „Zahlen in Formel einsetzen" gesetzt, treten stattdessen die eingegebenen Werte an ihre Stelle. So sieht man nicht nur das Ergebnis, sondern auch, wie es zustande kommt — praktisch, wenn man den Rechenweg für die Hausaufgaben nachvollziehen will.
ausgabe.innerHTML = "<strong>Formel:</strong> " + formelText + "<br>" + ergebnisText;
Zum Schluss landet alles per innerHTML in der Ergebnisfläche — innerHTML statt textContent, damit die Hochzahlen in <sup>-Tags dargestellt werden können. Verbunden wird das Ganze am Ende mit addEventListener("click", berechnen): Bei jedem Klick auf den Knopf läuft die Berechnung neu.
Zum Anpassen: Die Beschriftungen der Felder und die vorausgefüllten Werte könnt ihr frei ändern. Wer statt „n über k" lieber die Schreibweise C(n, k) mag, ändert nur die Textbausteine in den formelText-Zeilen — an der Rechnung selbst muss dafür nichts angefasst werden.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.
Mehr aus der Kategorie Mathematik
-
5 Zahlen
-
Altersberechnungen
-
Anzahl der Stellen von Potenzen kalkulieren
-
Barrel in Liter
-
Beliebige Wurzel ziehen
-
Collatz Problem
-
Denk Dir eine Zahl
-
Dezimalbruch
-
Dezimalzahl in Binärzahl umwandeln
-
Die Kamelhändler
-
Downloadzeit-Rechner
-
Drehender Kreis 1
-
Drehender Kreis 2
-
Drehender Kreis 3
-
Dreiecksrechner
-
Dreisatz
-
Dreisatz antiproportional
-
Einfacher Euro-Rechner
-
Fakultät berechnen
-
Fakultätsrechner
-
Fibonacci Reihe berechnen
-
Fibonacci-Zahlen
-
Flächenberechnung / Dreieck
-
Flächenberechnung / Kreis
-
Flächenberechnung / Parallelogramm
-
Flächenberechnung / Rechteck
-
Flächenberechnung / Trapez
-
Gedanken lesen
-
Geschwindigkeitsmesser