Лабораторная работа 2. Генерация случайных чисел с заданным распределением.
Часто для задач моделирования физических явлений требуется получать набор случайных чисел с заданным распределением. Вид распределения выбирается на основе особенностей поведения физической величины в соответствующем вероятностном процессе. Процесс может описываться, как дискретным, так и непрерывным законом распределения.
Генерация случайных чисел с дискретным распределением.
-
Метод масштабирования
Рассмотрим дискретную случайную величину , принимающую n значений с вероятностями . Эта величина задается таблицей распределения
Для моделирования такой дискретной случайной величины разбивают отрезок [0,1] на n последовательных отрезков , длины которых равны соответствующим вероятностям . Получают случайную величину γ, равномерно распределенную в интервале (0,1), и полагают , если γ .
2. Рекуррентный метод
При моделировании физических явлений важное значение имеют целочисленные случайные величины с распределением вида которые связаны простыми рекуррентными формулами = . Наиболее часто используемыми распределениями являются биноминальное распределение и распределение Пуассона. Для биноминального распределения с параметрами (p,n) имеем:
Для распределения Пуассона с параметром λ имеем:
Моделирование этих и подобных им случайных величин можно осуществлять по следующей простой схеме:
Ниже представлен фрагмент программы на языке С, который, осуществляет генерацию случайного числа для распределения Пуассона с параметром λ :
int puass(float lambda)
{
float ver, p0, P;
int k;
k = 0;
p0 = exp(-lamda);
P = p0;
ver = rand1();
do
{
ver = ver - P;
if (ver >= 0)
{
P = P*lamda/(k+1);
k = k + 1;
}
}while( ver < 0 );
return k;
}
Генерация случайных чисел с непрерывным распределением.
-
Метод трансформации
Пусть нам нужно получать значения случайной величины ζ распределенной в интервале (a, b) с плотностью вероятности . Обычный метод моделирования основан на том, что интегральная функция распределения любой непрерывной случайной величины равномерно распределена в интервале (0,1), т.е. для любой случайной величины x с
плотностью распределения случайная величина
равномерно распределена на интервале (0,1). |
|
Тогда случайную величину ζ с произвольной плотностью распределения можно найти следующим образом:
-
Получаем случайную величину γ , равномерно распределенную в интервале (0,1).
-
Полагаем ζ) =
-
Решая уравнение ζ( , находим искомое значение ζ.
Такой способ получения случайных величин называется методом обратных функций или методом трансформации.
Рассмотрим получение случайной величины τ, имеющей экспоненциальное распределение с плотностью , где λ - параметр распределения. Такое распределение широко используется при моделировании различных физических явлений: это и длина свободного пробега ионизирующих частиц в веществе, и распределение интервалов времени между моментами попадания ионизирующих частиц в регистрирующий прибор и т.д.
Следуя пункту 2 алгоритма, получаем
=γ.
Отсюда τ= или , поскольку величина распределена точно так же, как и γ. Таким образом метод трансформации может использоваться в случаях, когда для заданного распределения можно аналитически получить обратную функцию. Когда получить обратную функцию нельзя задачу нахождения ζ следует решать численно.
-
Алгоритм Бокса-Мюллера
Используется для генерации случайных чисел с нормальным распределением: и является вариантом метода трансформации в двумерном случае.
Рассмотрим пару случайных величин и с равномерным распределением [0;1], тогда новая пара случайных величин , будет распределена по нормальному закону. Чтобы убедиться в этом рассмотрим обратное преобразование: , . Преобразование одного распределения в другое может быть выражено:
Вычислим определитель: .
Таким образом, D представлен в виде произведения двух гауссовых функций: , а так как не превышает 1, то распределение действительно является произведением двух независимых нормальных распределений.
-
Алгоритм на основе центральной предельной теоремы.
Теорема утверждает, что закон распределения суммы независимых случайных величин стремится к нормальному при увеличении числа слагаемых. Будем считать, что случайная величина: , где - случайное число с равномерным распределением на отрезке [0;1], при достаточно больших n распределена нормально, с математическим ожиданием и среднеквадратичным отклонением . Тогда нормально распределенные случайные величины с нулевым среднем и единичной дисперсией можно вычислять по следующей приближенной формуле:
При n=12 эта формула заметно упрощается:
Ниже представлен фрагмент программы на языке С, который, осуществляет генерацию случайного числа для нормального распределения:
float gauss()
{
float rnd = 0.0;
int i;
for(i = 1; i < 12; i++) rnd += rand1();
return rnd – 6.0;
}
-
Метод отбора-отказа (метод Неймана).
Пусть случайная величина x определена на конечном интервале [a,b] и плотность ее распределения ограничена, так что Тогда, используя пару равномерно распределенных на интервале (0,1) случайных чисел x, y, осуществляем следующий алгоритм для розыгрыша значения ξ с заданным распределением: |
-
генерируем случайное число ξ с равномерным распределением на отрезке
-
генерируем случайное число с равномерным распределением на отрезке от 0 до
-
если , то принимаем величину ξ в качестве результата работы алгоритма.
В противном случае отбрасываем ξ и возвращаемся к пункту 1, повторяем алгоритм сначала.
При данных условиях доля принятых случайных величин: . Если интервал [a,b] достаточно велик, а ширина области значений функции близких к M, гораздо меньше интервала [a, b], то для успешной генерации случайного числа потребуется большое число повторений. Один из способов уменьшения повторений и увеличения числа принятых случайных чисел состоит в разделении интервала на взаимно исключающие интервалы.
Разделим интервал на k-интервалов таких, что j-й интервал имеет границы: , при этом: , и . Обозначим fi как максимум f(y) на j-м интервале. Для образования случайных чисел, с плотностью вероятности образуютпар переменных . Припишем таких пар к j-му интервалу и вычислим . Если , то принимаем в качестве новой случайной величины. Доля принятых случайных величин равна:
-
Составной метод.
Пусть – плотность вероятности, зависящая от параметра z, - функция распределения величины z. Чтобы получить значения случайной величины Y, имеющей плотность вероятности , сначала получают значения случайной величины, имеющей функцию распределения , затем генерируют вторую выборку с плотностью .
Задания для самостоятельной работы.
- Введение.
- Основные понятия теории вероятности.
- Числовые характеристики случайных величин.
- Основные законы распределения.
- Обработка статистических данных
- Лабораторная работа 1. Программная генерация псевдослучайных чисел.
- Метод Парка – Миллера (мультипликативный конгруэнтный метод)
- Лабораторная работа 2. Генерация случайных чисел с заданным распределением.
- Системы случайных величин.
- Лабораторная работа 3. Генерация системы случайных чисел с заданным распределением.
- Случайные процессы