Вопрос:
Как легко генерировать случайные числа после нормального распределения на C или C без использования Boost библиотеки?
Ответ:
Преобразование Бокса-Мюллера
Преобразование Бокса-Мюллера является широко используемым методом генерации нормально распределенные числа из единого генератора случайных чисел. Он создает значения, которые точно соответствуют распределению Гаусса.
Математическая формула преобразования Бокса-Мюллера выглядит следующим образом:
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
где:
Реализация:
Чтобы реализовать преобразование Бокса-Мюллера в C/C, вы можете использовать следующий код:
#include#include double box_muller() { std::random_device rd; // Seed the random number generator with a system clock seed std::default_random_engine rng(rd()); std::uniform_real_distribution dist(0.0, 1.0); double U1 = dist(rng); double U2 = dist(rng); double x = sqrt(-2 * log(U1)) * cos(2 * M_PI * U2); return x; }
Использование:
Чтобы сгенерировать нормально распределенное случайное число, просто вызовите функцию box_muller():
double random_number = box_muller();
Значение random_number будет случайной величиной с распределением по Гауссу со средним значением 0 и стандартным отклонением. 1.
Примечание:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3