Normalverteilte Zufallszahlen in C/C generieren
Zufallszahlen zu generieren, die einer Normalverteilung in C oder C entsprechen, ist eine häufige Aufgabe in verschiedenen rechnerischen und statistischen Anwendungen. Dies kann effektiv mit der Box-Muller-Transformation erreicht werden, einer weit verbreiteten Technik, die zwei gleichmäßige Zufallszahlen nutzt, um ein Paar normalverteilter Zahlen zu erzeugen.
Die Box-Muller-Transformation basiert auf einer einfachen mathematischen Formel:
x = sqrt(-2 * ln(u1)) * cos(2 * pi * u2) y = sqrt(-2 * ln(u1)) * sin(2 * pi * u2)
wobei u1 und u2 zwei unabhängige gleichmäßige Zufallszahlen sind, die im Bereich [0, 1] generiert werden. Diese beiden Gleichungen definieren zwei unabhängige Zufallsvariablen, x und y, die einer Normalverteilung mit einem Mittelwert von Null und einer Einheitsvarianz folgen.
Um diese Methode in C/C zu implementieren, können die folgenden Schritte unternommen werden:
double rand0to1() { return rand() / (RAND_MAX + 1.0); }
pair<double, double> box_muller() { double u1 = rand0to1(); double u2 = rand0to1(); double x = sqrt(-2.0 * log(u1)) * cos(2.0 * M_PI * u2); double y = sqrt(-2.0 * log(u1)) * sin(2.0 * M_PI * u2); return {x, y}; }
Diese Methode generiert effektiv Zufallszahlen, die einer Normalverteilung ohne folgen Bedarf an externen Bibliotheken.
Das obige ist der detaillierte Inhalt vonWie generiert man normalverteilte Zufallszahlen in C/C mithilfe der Box-Muller-Transformation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!