Собственная реализация Распределения Случайных Чисел для C ++ 11

Мне нужно реализовать свой собственный класс распределения случайных чисел в C ++ 11, но я не могу найти минималистичную реализацию, чтобы начать меня.

Я уже искал исходный код gcc, но нашел только заголовочные файлы, а не реализации различных неоднородных дистрибутивов.

Можете ли вы указать мне на простой, но полный пример неравномерного класса распределения в C ++ 11 или опубликовать его здесь?

0

Решение

Я думаю, что реализация собственного дистрибутива не является чем-то слишком экзотическим …

Вы ошибаетесь. Люк Деврой написал Книга на 800 страниц по теме. Не существует единой техники, которая бы работала для всех дистрибутивов. Есть 4 общих подхода:

  1. Инверсия — если накопительная функция распределения FИкс(б) -оо < б < ∞, является непрерывной и обратимой функцией, то FИкс(X), CDF, примененный к его собственной случайной переменной, имеет равномерное (0,1) распределение. Equate FИкс(X) = U и решить для X (если это возможно).

  2. Свертка — суммирование или дифференцирование случайных величин дает новое распределение. Например, сумма двух униформ имеет треугольное распределение; или сумма n независимых хи-квадрат (1) дает хи-квадрат (n)

  3. Композиция — Некоторые сложные распределения могут быть построены кусочно из более простых распределений, используя условную вероятность.

  4. Трюки / особые отношения — используйте уникальные отношения между различными распределениями, такие как тот факт, что квадрат стандартного нормаля является случайной величиной хи-квадрат (1); или что хи-квадрат (2) идентичен экспоненте (2). Вместе с Пифагором эти два факта лежат в основе метода Бокса-Мюллера для генерации нормалей. Составьте две независимые стандартные нормали вместе, и вы получите двумерный вектор из (0,0), который направляется в равномерном (0,2π) направлении и имеет длину sqrt(exponential(2)), Создайте такой вектор и преобразуйте его обратно в декартовы координаты, используя преобразования синуса и косинуса, чтобы получить две независимые нормали.

Книга Девроя заполняет детали для многих «популярных» дистрибутивов, но поскольку существует бесконечное количество дистрибутивов, исчерпывающее обращение было бы невозможно.

Раздел 4.3 на странице 59 этого учебная статья один рабочий пример для каждого из четырех методов, изложенных выше, и доказательство инверсии на страницах 60-62.

4

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector