Frage zur Erstellung normalverteilter Zufallszahlen

24/05/2008 - 13:36 von Olaf Korn | Report spam
Hallo,

ich benötige Zufallszahlen, für die folgendes gilt:
# die Zahlen sollten möglichst normalverteilt sein.
# die Zahlen müssen unbedingt im Bereich von -1 bis 1 (jeweils
einschließlich) mit Erwartungswert 0 liegen

Mein Zufallszahlengenerator liefert mir normalverteilte Zufallszahlen
für Erwartungswert 0 und Standardabweichung 1. Wie komme ich daraus mit
möglichst geringem Aufwand und ohne die Verteilung zu stark zu
verfàlschen auf meine Zufallswerte?
Ich überlege die Werte aus dem Generator durch 3 zu teilen (~99% der
generierten Zufallswerte sollten ja um maximal 3x Standardabweichung vom
Erwartungswert abweichen) und alle Werte, die dann trotzdem noch
jenseits von -1 und 1 liegen einfach fest auf diese Randwerte zu setzen.

Viele Grüße - Olaf
 

Lesen sie die antworten

#1 Jan Reimes
24/05/2008 - 14:19 | Warnen spam
Hallo,

Olaf Korn schrieb:
ich benötige Zufallszahlen, für die folgendes gilt:
# die Zahlen sollten möglichst normalverteilt sein.
# die Zahlen müssen unbedingt im Bereich von -1 bis 1 (jeweils
einschließlich) mit Erwartungswert 0 liegen

Mein Zufallszahlengenerator liefert mir normalverteilte Zufallszahlen
für Erwartungswert 0 und Standardabweichung 1. Wie komme ich daraus mit
möglichst geringem Aufwand und ohne die Verteilung zu stark zu
verfàlschen auf meine Zufallswerte?




Du willst quasi eine abgeschnittene Gaußverteilung der Form

p(x) = rect(x/2) * p1(x) mit
p1(x) \frac{\exp{-\frac{(x-\mu)^2}{2*\sigma^2}}}
{\sqrt{2*pi*\sigma^2}} (Gauß-Verteilungsdichtefunktion)

erreichen (mit \mu = 0)?

Dann würde folgender Algorithmus evtl. helfen:

1. Erzeuge gaußverteilte Zufallszahl X mit sigma^2 = 1 und mu = 0
2. Verwerfe, falls abs(X) > 1, erzeuge solange neues X bis abs(X) <= 1
3. Skaliere mit Faktor a um Varianz auf 1 zu bringen

Den Skalierungsfaktor a kannst du entweder aus dem Integral bzw.
Gleichung \int_{-1}^{+1}{p1(x)} = 1 bestimmen (nach sigma freistellen,
falls das möglich ist, nicht probiert) oder aus einer genügend großen
Stichprobe aus X als a=std(x) berechnen...

HTH & Gruß,
Jan

Ähnliche fragen