Генерация случайной величины

Назад, на численное моделирование

АЛГОРИТМ ГЕНЕРАЦИИ СЛУЧАЙНОЙ ВЕЛИЧИНЫ, ПОДЧИНЯЮЩЕЙСЯ ЗАДАННОМУ ЗАКОНУ РАСПРЕДЕЛЕНИЯ.

Пусть случайная величина х ограничена отрезком [a,b] и ее плотность вероятности равна
1) Находим максимальное значение

2) Разделим промежуток на m равных частей.
3) С помощью генератора случайных чисел генерируется случайная величина , имеющая равномерное распределение на отрезке [a,b]

4) Находим отношение

5) Генерируется величина определенная на отрезке [0,1] и имеющая на нем равномерное распределение.

6) Если , то определяем генерируемую величину х=

7) Если , то повторяем этапы (3,4,5), пока не выполнится условие (6).

Определим вероятность попадания в отрезок случайной величины, генерируемой согласно с вышеизложенным алгоритмом.

Введем несколько вспомогательных величин:
- вероятность того, что на i-ом шаге генератор не сработает.
- вероятность того, что на i-ом шаге генератор сработает и именно на отрезке

- вероятность того, что генератор, в конце концов, выдаст

учитывая, что отрезки равны и имеет равномерное распределение, получим

учитывая, что имеет равномерное распределение и, как следствие, , получим

Таким образом:



при сумма превращается в интеграл и, согласно условию нормировки, обращается в единицу


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


На рисунке в виде гистограммы представлено распределение случайной величины, подчиняющейся нормальному закону распределения. Значения случайной величины были получены при помощи вышеизложенного алгоритма, мощность выборки равна 5000, m=50. Видно хорошее совпадение с аналитическими значениями , представленными в виде сплошной линии.

Алгоритм можно без труда обобщить на функции нескольких переменных, напрмер, f(x,y) или f(x,y,z).

Поскольку существуют и другие алгоритмы генерации псевдослучайных величин по заданному закону распределения, стоит отметить достоинства этого метода:
1) В качестве функции распределения может быть задана произвольная зависимость f(x), от нее не требуется аналитического задания, непрерывности, дифференцируемости, хорошей интегрируемости (хотя требуется ограниченность на интересующем нас интервале).
2) Область распределения может быть ограничена любым интервалом.
3) Функция не требует нормировки. Это особенно удобно на ограниченном (по тем или иным соображениям) интервале.

Не смотря на независимую (с нуля), реализацию в доинтернетные времена, приписывать себе авторство этого алгоритма не собираюсь - более поздний поиск по тематике показал, что это, по сути, один из вариантов выборки с отклонением (acceptance-rejection sampling).
Редактируемый вариант данной статьи (в смысле если кому-то понадобятся редактируемые формулы - к сожалению, объекты MathType встраиваются в html в виде картинок) можно получить, отправив запрос автору.

Скачать класс TfrGenerator v.1.0 - модифицированный генератор случайных чисел, реализованный с использованием данного алгоритма.

Скачать класс TfrGenerator v.2.0 -- в данной версии функция, задающая плотность вероятности, вынесена в отдельный класс, что позволило иметь одновременно несколько объектов класса TfrGenerator, выдающих случайную величину по одному и тому же закону (например, нормальному), но с разными параметрами (например, дисперсией и средним арифметическим)

Скачать вышеизложенное в pdf-формате (210 кб)


Назад, на численное моделирование

Полное описание реализованных в программе возможностей