logo
Stohastic / Stohastic / Методичка_Стохастика_Федунов

Лабораторная работа 2. Генерация случайных чисел с заданным распределением.

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

Генерация случайных чисел с дискретным распределением.

  1. Метод масштабирования

Рассмотрим дискретную случайную величину , принимающую 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;

}

Генерация случайных чисел с непрерывным распределением.

  1. Метод трансформации

Пусть нам нужно получать значения случайной величины ζ распределенной в интервале (a, b) с плотностью вероятности . Обычный метод моделирования основан на том, что интегральная функция распределения любой непрерывной случайной величины равномерно распределена в интервале (0,1), т.е. для любой случайной величины x с

плотностью распределения случайная величина

равномерно распределена на интервале (0,1).

Тогда случайную величину ζ с произвольной плотностью распределения можно найти следующим образом:

  1. Получаем случайную величину γ , равномерно распределенную в интервале (0,1).

  2. Полагаем ζ) =

  3. Решая уравнение ζ( , находим искомое значение ζ.

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

Рассмотрим получение случайной величины τ, имеющей экспоненциальное распределение с плотностью , где λ - параметр распределения. Такое распределение широко используется при моделировании различных физических явлений: это и длина свободного пробега ионизирующих частиц в веществе, и распределение интервалов времени между моментами попадания ионизирующих частиц в регистрирующий прибор и т.д.

Следуя пункту 2 алгоритма, получаем

=γ.

Отсюда τ= или , поскольку величина распределена точно так же, как и γ. Таким образом метод трансформации может использоваться в случаях, когда для заданного распределения можно аналитически получить обратную функцию. Когда получить обратную функцию нельзя задачу нахождения ζ следует решать численно.

  1. Алгоритм Бокса-Мюллера

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

Рассмотрим пару случайных величин и с равномерным распределением [0;1], тогда новая пара случайных величин , будет распределена по нормальному закону. Чтобы убедиться в этом рассмотрим обратное преобразование: , . Преобразование одного распределения в другое может быть выражено:

Вычислим определитель: .

Таким образом, D представлен в виде произведения двух гауссовых функций: , а так как не превышает 1, то распределение действительно является произведением двух независимых нормальных распределений.

  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;

}

  1. Метод отбора-отказа (метод Неймана).

Пусть случайная величина x определена на конечном интервале [a,b] и плотность ее распределения ограничена, так что Тогда, используя пару равномерно распределенных на интервале (0,1) случайных чисел x, y, осуществляем следующий алгоритм для розыгрыша значения ξ с заданным распределением:

  1. генерируем случайное число ξ с равномерным распределением на отрезке

  2. генерируем случайное число с равномерным распределением на отрезке от 0 до

  3. если , то принимаем величину ξ в качестве результата работы алгоритма.

В противном случае отбрасываем ξ и возвращаемся к пункту 1, повторяем алгоритм сначала.

При данных условиях доля принятых случайных величин: . Если интервал [a,b] достаточно велик, а ширина области значений функции близких к M, гораздо меньше интервала [a, b], то для успешной генерации случайного числа потребуется большое число повторений. Один из способов уменьшения повторений и увеличения числа принятых случайных чисел состоит в разделении интервала на взаимно исключающие интервалы.

Разделим интервал на k-интервалов таких, что j-й интервал имеет границы: , при этом: , и . Обозначим fi как максимум f(y) на j-м интервале. Для образования случайных чисел, с плотностью вероятности образуютпар переменных . Припишем таких пар к j-му интервалу и вычислим . Если , то принимаем в качестве новой случайной величины. Доля принятых случайных величин равна:

  1. Составной метод.

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

Задания для самостоятельной работы.