Heim > Backend-Entwicklung > C++ > Wie generiert man normalverteilte Zufallszahlen in C/C mithilfe der Box-Muller-Transformation?

Wie generiert man normalverteilte Zufallszahlen in C/C mithilfe der Box-Muller-Transformation?

Linda Hamilton
Freigeben: 2024-11-30 12:19:26
Original
367 Leute haben es durchsucht

How to Generate Normally Distributed Random Numbers in C/C   using the Box-Muller Transform?

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)
Nach dem Login kopieren

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:

  1. Fügen Sie den Standardbibliotheksheader ein. für den Zugriff auf die Funktion rand().
  2. Definieren Sie eine Funktion, um ein gleichmäßiges zufälliges Double nach einem Bereich [0, 1) zu generieren. Dies kann wie folgt erfolgen:
double rand0to1() {
    return rand() / (RAND_MAX + 1.0);
}
Nach dem Login kopieren
  1. Implementieren Sie die Box-Muller-Transformationsfunktion:
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};
}
Nach dem Login kopieren
  1. Rufen Sie die Funktion box_muller zum Generieren auf normalverteilte Zufallszahlen nach Bedarf.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage