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
Lepaskan: 2024-11-30 12:19:26
asal
426 orang telah melayarinya

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)
Salin selepas log masuk

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);
}
Salin selepas log masuk
  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};
}
Salin selepas log masuk
  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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan