Wie generiert man aus gleich verteilten Zufallszahlen normalverteilte Zufallszahlen?
Wenn man in der Lage ist gleichverteilte rationale Zufallszahlen zwischen 0 und 1 zu erzeugen, wie kann man daraus normalverteilte Zufallszahlen mit einem vorgegebenen Erwartungswert und einer vorgegebenen Varianz erzeugen ?
4 Antworten
Ist nicht ganz einfach.
Du gehts von der gaussschen Normalverteilung aus, die üblicherweise als Wahrscheinlichkeitsdichte bezeichnet wird.
Wenn man diese Funktion intergriert von -unendlich bis x dann hast Du die so genannte Verteilungsfunktion(x). Diese hat einen Definitionsbereich von -unendlich bis +unendlich und einen Wertebereich von 0 bis 1.
Unglücklicherweise gibt es keine Stammfunktion für dieses Integral. Man muss auf tabellierte Werte zurückgreifen oder irgendwo diese erf-Funktion abrufen können.
Was Du brauchst ist nun wiederum die Umkehrfunktion von dieser Verteilungsfunktion. Da kannst Du Zufallszahlen von 0 bis 1 hineinkippen und es kommen normalverteilte Zahlen von -uendlich bis + unendlich heraus.
Wenn Du damit ein wenig herumspielen möchtest: In Excel gibt es das als Fertiglösung und heisst
NORM.INV(zufallszahl; Mittelwert; Standardabweichung)
Probier es mal aus. Es macht Spass.
NORM steht für Normalverteilt
INV steht für Umkehrfunktion
In Zufallszahl gibts Du Deine randoms von 0 bis 1 ein
Bei Mittelwert stellts Du Deinen Häufungsschwerpunkt ein
Und natürlich kannst Du Dir auch eine Streuung aussuchen.
Und wer kein EXCEL hat oder wissen möchte, wie man das mit der aerf(x)=InverseErf(x)=erf^(-1)(x) berechnet, kann sich das online
per Iterationsrechner Beispiel 128
http://www.gerdlamprecht.de/Roemisch_JAVA.htm#ZZZZZ0128
selbst ausrechnen oder die Funktion plotten...
Eine bewährtes Verfahren ist die Box-Muller-Methode, siehe Wikipedia. Der englische Artikel, Box–Muller transform, enthält ein Codebeispiel in C++. Eine Abwandlung hiervon findet man unter: Polar-Methode. Das Codebeispiel ist in C. Der engl. Artikel hierzu, Marsaglia polar method, zeigt Codebeispiele in Java und C++.
Hier werden einige Verfahren diskutiert: http://stackoverflow.com/questions/2325472/generate-random-numbers-following-a-normal-distribution-in-c-c
Es gibt ein paar mathematische Algorithmen, um mithilfe von gleichverteilten Zufallszahlen Normalverteilte zu generieren.
https://de.wikipedia.org/wiki/Normalverteilung#Erzeugung_normalverteilter_Zufallszahlen
Erst mal recht herzlichen Dank für deine Antwort !
Das hatte ich schon gesehen, jedoch kann ich dort nirgends eine Verrechnung des Erwartungswertes und der Varianz erkennen.
Die Algorithmen erzeugen eine Standardnormalverteilung (also my = 0, sigma = 1). Wenn du dir damit also eine standardnormalverteilte Zufallszahl ZN erzeugst, dann kannst du die anschließend mit
YN = my + sigma * ZN
in den gewünschten Bereich schieben. my = Erwartungswert, sigma = Standardabweichung
Auf welches Programm bezogen?
Auf kein Programm bezogen, auf ein selbst programmiertes.
Die Frage lautet wie man aus gleichverteilten Zufallszahlen normalverteilte Zufallszahlen macht.
Aber Danke für dein Interesse !
Recht herzlichen Dank für deine Antwort !