Jump to content

Преобразование Бокса – Мюллера

Визуализация преобразования Бокса-Мюллера — цветные точки в единичном квадрате (u 1 , u 2 ), нарисованные в виде кругов, сопоставляются с двумерным гауссианом (z 0 , z 1 ), нарисованным в виде крестиков. Графики на полях представляют собой функции распределения вероятностей z0 и z1. z0 и z1 неограничены; они кажутся в [-2,5, 2,5] из-за выбора иллюстрированных точек. В файле SVG наведите указатель мыши на точку, чтобы выделить ее и соответствующую ей точку.

Преобразование Бокса -Мюллера , Джордж Эдвард Пелэм Бокс и Мервин Эдгар Мюллер , [ 1 ] — это метод выборки случайных чисел для генерации пар независимых , стандартных, нормально распределенных (нулевое ожидание , единичная дисперсия ) случайных чисел с учетом источника равномерно распределенных случайных чисел. Этот метод был впервые упомянут Раймондом Э.А.К. Пейли и Норбертом Винером в их трактате 1934 года о преобразованиях Фурье в комплексной области. [ 2 ] Учитывая статус этих последних авторов, а также широкую доступность и использование их трактата, почти наверняка Бокс и Мюллер были хорошо осведомлены о его содержании.

Преобразование Бокса – Мюллера обычно выражается в двух формах. Базовая форма, заданная Боксом и Мюллером, берет две выборки из равномерного распределения на интервале (0,1) и сопоставляет их с двумя стандартными, нормально распределенными выборками. Полярная форма берет две выборки из разных интервалов, [−1,+1] и сопоставляет их с двумя нормально распределенными выборками без использования функций синуса или косинуса.

Преобразование Бокса-Мюллера было разработано как более эффективная в вычислительном отношении альтернатива методу выборки обратного преобразования . [ 3 ] Алгоритм зиккурата дает более эффективный метод для скалярных процессоров (например, старых процессоров), тогда как преобразование Бокса-Мюллера лучше подходит для процессоров с векторными модулями (например, графических процессоров или современных процессоров). [ 4 ]

Основная форма

[ редактировать ]

Предположим, что U 1 и U 2 являются независимыми выборками, выбранными из равномерного распределения на единичном интервале (0, 1) . Позволять и

Тогда Z0 Z1 и распределением независимые стандартным случайные величины со нормальным .

Вывод [ 5 ] основан на свойстве двумерной декартовой системы , где координаты X и Y описываются двумя независимыми и нормально распределенными случайными величинами, случайными величинами для R 2 и Θ (показано выше) в соответствующих полярных координатах также независимы и могут быть выражены как и

Потому что Р 2 является квадратом нормы стандартной двумерной нормальной переменной ( X , Y ) , она имеет распределение хи-квадрат с двумя степенями свободы. В частном случае двух степеней свободы распределение хи-квадрат совпадает с экспоненциальным распределением и уравнение для R 2 выше представлен простой способ генерации необходимой экспоненциальной переменной.

Полярная форма

[ редактировать ]
Два равномерно распределенных значения, u и v, используются для получения значения s = R. 2 , который также распределен равномерно. Определения синуса и косинуса затем применяются к базовой форме преобразования Бокса – Мюллера, чтобы избежать использования тригонометрических функций.

Полярную форму впервые предложил Дж. Белл. [ 6 ] и затем модифицирован Р. Кнопом. [ 7 ] Хотя было описано несколько различных версий полярного метода, здесь будет описана версия Р. Кнопа, поскольку она наиболее широко используется, отчасти из-за ее включения в числовые рецепты . Немного другая форма описана Д. Кнутом как «Алгоритм P» в книге «Искусство компьютерного программирования » . [ 8 ]

Учитывая u и v , независимые и равномерно распределенные в замкнутом интервале [−1, +1] , положим s = R 2 = ты 2 + v 2 . Если s = 0 или s ≥ 1 , отбросьте u и v и попробуйте другую пару ( u , v ) . Поскольку u и v распределены равномерно и поскольку были допущены только точки внутри единичного круга, значения s будут также равномерно распределены в открытом интервале (0, 1) . В последнем можно убедиться, рассчитав кумулятивную функцию распределения для s в интервале (0, 1) . Это площадь круга радиусом , разделенный на . Отсюда мы находим, что функция плотности вероятности имеет постоянное значение 1 на интервале (0, 1) . Точно так же угол θ, разделенный на равномерно распределена в интервале [0, 1) и не зависит от s .

Теперь мы отождествляем значение s со значением U 1 и с U 2 в основной форме. Как показано на рисунке, значения и в основной форме можно заменить соотношениями и , соответственно. Преимущество состоит в том, что можно избежать прямого вычисления тригонометрических функций. Это полезно, когда вычисление тригонометрических функций обходится дороже, чем одно деление, заменяющее каждое из них.

Точно так же, как базовая форма дает два стандартных нормальных отклонения, так и этот альтернативный расчет. и

Противопоставление двух форм

[ редактировать ]

Полярный метод отличается от базового метода тем, что является разновидностью браковочной выборки . Он отбрасывает некоторые сгенерированные случайные числа, но может быть быстрее, чем базовый метод, поскольку его проще вычислить (при условии, что генератор случайных чисел относительно быстр) и он более устойчив в числовом отношении. [ 9 ] Отказ от использования дорогостоящих тригонометрических функций повышает скорость по сравнению с базовой формой. [ 6 ] Он отбрасывает 1 - π /4 ≈ 21,46% от общего количества входных сгенерированных пар случайных чисел с равномерным распределением, т.е. отбрасывает 4/ π - 1 ≈ 27,32% пар равномерно распределенных случайных чисел на каждую гауссовских сгенерированную пару случайных чисел, требуя 4/ π ≈ 1,2732 входных данных. случайные числа для каждого выходного случайного числа.

Базовая форма требует двух умножений, 1/2 логарифма, 1/2 квадратного корня и одной тригонометрической функции для каждой нормальной переменной. [ 10 ] На некоторых процессорах косинус и синус одного и того же аргумента можно вычислить параллельно с помощью одной инструкции. В частности, для машин на базе процессоров Intel можно использовать инструкцию ассемблера fsincos или инструкцию expi (обычно доступную из C как встроенную функцию ) для вычисления сложных и просто разделите действительную и мнимую части.

Примечание: Чтобы явно вычислить комплексно-полярную форму, используйте следующие замены в общей форме:

Позволять и Затем

Полярная форма требует 3/2 умножения, 1/2 логарифма, 1/2 квадратного корня и 1/2 деления для каждой нормальной переменной. В результате одно умножение и одна тригонометрическая функция заменяются одним делением и условным циклом.

Усечение хвостов

[ редактировать ]

Когда компьютер используется для создания однородной случайной величины, он неизбежно будет иметь некоторые неточности, поскольку существует нижняя граница того, насколько числа могут быть близки к 0. Если генератор использует 32 бита на выходное значение, это наименьшее ненулевое число, которое может быть сгенерировано . Когда и равны этому, преобразование Бокса-Мюллера дает нормальное случайное отклонение, равное . Это означает, что алгоритм не будет генерировать случайные величины со стандартными отклонениями более 6,660 от среднего значения. Это соответствует доле потеряно из-за усечения, где — стандартное кумулятивное нормальное распределение. При 64 битах предел увеличивается до стандартные отклонения, для которых .

Выполнение

[ редактировать ]

Стандартное преобразование Бокса-Мюллера генерирует значения из стандартного нормального распределения ( т.е. стандартных нормальных отклонений ) со средним значением 0 и стандартным отклонением 1 . Приведенная ниже реализация в стандарте C++ генерирует значения из любого нормального распределения со средним значением. и дисперсия . Если является стандартным нормальным отклонением, тогда будет иметь нормальное распределение со средним значением и стандартное отклонение . Генератор случайных чисел был создан для того, чтобы гарантировать, что новые псевдослучайные значения будут возвращаться в результате последовательных вызовов функции. generateGaussianNoise функция.

#include <cmath>
#include <limits>
#include <random>
#include <utility>

//"mu" is the mean of the distribution, and "sigma" is the standard deviation.
std::pair<double, double> generateGaussianNoise(double mu, double sigma)
{
    constexpr double two_pi = 2.0 * M_PI;

    //initialize the random uniform number generator (runif) in a range 0 to 1
    static std::mt19937 rng(std::random_device{}()); // Standard mersenne_twister_engine seeded with rd()
    static std::uniform_real_distribution<> runif(0.0, 1.0);

    //create two random numbers, make sure u1 is greater than zero
    double u1, u2;
    do
    {
        u1 = runif(rng);
    }
    while (u1 == 0);
    u2 = runif(rng);

    //compute z0 and z1
    auto mag = sigma * sqrt(-2.0 * log(u1));
    auto z0  = mag * cos(two_pi * u2) + mu;
    auto z1  = mag * sin(two_pi * u2) + mu;

    return std::make_pair(z0, z1);
}
function rand_normal()  {

    /* Syntax:
     *
     *    [ x, y ]  =   rand_normal();
     *      x       =   rand_normal()[0];
     *      y       =   rand_normal()[1];
     *
    */


    // Box-Muller Transform:

    let phi  =   2 * Math.PI * Math.random();
    let R    =   Math.sqrt(  -2 * Math.log( Math.random() )  );
    let x    =   R * Math.cos(phi);
    let y    =   R * Math.sin(phi);


    // Return values:

    return [ x, y ];

}
"""
    boxmullersample(N)

Generate `2N` samples from the standard normal distribution using the Box-Muller method.
"""
function boxmullersample(N)
    z = Array{Float64}(undef,N,2);
    for i in axes(z,1)
        z[i,:] .= sincospi(2 * rand());
        z[i,:] .*= sqrt(-2 * log(rand()));
    end
    vec(z)
end

"""
    boxmullersample(n,μ,σ)

Generate `n` samples from the normal distribution with mean `μ` and standard deviation `σ` using the Box-Muller method.
"""
function boxmullersample(n,μ,σ)
    μ .+ σ*boxmullersample(cld(n,2))[1:n];
end

См. также

[ редактировать ]
  1. ^ Коробка, ГЭП; Мюллер, Мервин Э. (1958). «Заметки о генерации случайных нормальных отклонений» . Анналы математической статистики . 29 (2): 610–611. дои : 10.1214/aoms/1177706645 . JSTOR   2237361 .
  2. ^ Раймонд Э.А.К. Пейли и Норберт Винер Преобразования Фурье в комплексной области, Нью-Йорк: Американское математическое общество (1934) §37.
  3. ^ Клоден и Платен, Численные решения стохастических дифференциальных уравнений , стр. 11–12.
  4. ^ Хоуз, Ли; Томас, Дэвид (2008). GPU Gems 3 — Эффективная генерация случайных чисел и применение с использованием CUDA . Pearson Education, Inc. ISBN  978-0-321-51526-1 .
  5. ^ Шелдон Росс, Первый курс теории вероятностей , (2002), стр. 279–281.
  6. ^ Jump up to: а б Белл, Джеймс Р. (1968). «Алгоритм 334: Нормальные случайные отклонения» . Коммуникации АКМ . 11 (7): 498. дои : 10.1145/363397.363547 .
  7. ^ Кноп, Р. (1969). «Замечание к алгоритму 334 [G5]: Нормальные случайные отклонения» . Коммуникации АКМ . 12 (5): 281. дои : 10.1145/362946.362996 .
  8. ^ Кнут, Дональд (1998). Искусство компьютерного программирования: Том 2: Получисловые алгоритмы . п. 122. ИСБН  0-201-89684-2 .
  9. ^ Эверетт Ф. Картер-младший, Генерация и применение случайных чисел , Forth Dimensions (1994), Vol. 16, № 1 и 2.
  10. ^ Оценка 2 π U 1 считается за одно умножение, поскольку значение 2 π можно вычислить заранее и использовать повторно.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2173f0e00c4d1e7869c1ce21414a9309__1722437400
URL1:https://arc.ask3.ru/arc/aa/21/09/2173f0e00c4d1e7869c1ce21414a9309.html
Заголовок, (Title) документа по адресу, URL1:
Box–Muller transform - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)