Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menjana Nombor Rawak Teragih Biasa dalam C/C menggunakan Transformasi Box-Muller?

Bagaimana untuk Menjana Nombor Rawak Teragih Biasa dalam C/C menggunakan Transformasi Box-Muller?

Linda Hamilton
Linda Hamiltonasal
2024-11-30 12:19:26348semak imbas

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

Menjana Nombor Rawak Teragih Biasa dalam C/C

Menjana nombor rawak yang mematuhi taburan normal dalam C atau C adalah tugas yang kerap dalam pelbagai aplikasi pengiraan dan statistik. Ini boleh dicapai dengan berkesan menggunakan transformasi Box-Muller, teknik yang digunakan secara meluas yang memanfaatkan dua nombor rawak seragam untuk menghasilkan sepasang nombor yang diedarkan secara normal.

Transformasi Box-Muller bergantung pada formula matematik mudah:

x = sqrt(-2 * ln(u1)) * cos(2 * pi * u2)
y = sqrt(-2 * ln(u1)) * sin(2 * pi * u2)

di mana u1 dan u2 ialah dua nombor rawak seragam bebas yang dijana dalam julat [0, 1]. Kedua-dua persamaan ini mentakrifkan dua pembolehubah rawak bebas, x dan y, yang mengikut taburan normal dengan min sifar dan varians unit.

Untuk melaksanakan kaedah ini dalam C/C , langkah berikut boleh diambil:

  1. Sertakan pengepala perpustakaan standard untuk mengakses fungsi rand().
  2. Takrifkan fungsi untuk menghasilkan gandaan rawak seragam mengikut julat [0, 1). Ini boleh dilakukan menggunakan:
double rand0to1() {
    return rand() / (RAND_MAX + 1.0);
}
  1. Melaksanakan fungsi transformasi Box-Muller:
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};
}
  1. Panggil fungsi box_muller untuk menjana nombor rawak taburan normal mengikut keperluan.

Kaedah ini berkesan menjana nombor rawak yang mengikut taburan normal tanpa memerlukan perpustakaan luar.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Nombor Rawak Teragih Biasa dalam C/C menggunakan Transformasi Box-Muller?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn