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
![](https://images.gutefrage.net/media/user/ProfFrink/1445462639575_nmmslarge__21_2_360_360_db31c5ca456d530b87e138131afa17f4.png?v=1445462642000)
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.
![](https://images.gutefrage.net/media/user/hypergerd/1444746519_nmmslarge.jpg?v=1444746519000)
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...
![](https://images.gutefrage.net/media/default/user/11_nmmslarge.png?v=1551279448000)
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
![](https://images.gutefrage.net/media/user/DepravedGirl/1444750844_nmmslarge.jpg?v=1444750844000)
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Es gibt ein paar mathematische Algorithmen, um mithilfe von gleichverteilten Zufallszahlen Normalverteilte zu generieren.
https://de.wikipedia.org/wiki/Normalverteilung#Erzeugung_normalverteilter_Zufallszahlen
![](https://images.gutefrage.net/media/user/DepravedGirl/1444750844_nmmslarge.jpg?v=1444750844000)
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.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
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
![](https://images.gutefrage.net/media/user/DepravedGirl/1444750844_nmmslarge.jpg?v=1444750844000)
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Auf welches Programm bezogen?
![](https://images.gutefrage.net/media/user/DepravedGirl/1444750844_nmmslarge.jpg?v=1444750844000)
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 !