МЕТОДЫ МОДЕЛИРОВАНИЯ СЛУЧАЙНЫХ ВЕЛИЧИН С ЗАДАННЫМ ЗАКОНОМ РАСПРЕДЕЛЕНИЯ
В процессе построения имитационных моделей стохастических систем часто возникает необходимость имитирования случайных процессов или задания случайных воздействий на некоторую систему Законы распределений этих случайных величин в ряде случаев отличаются от равномерного. Подобные ситуации определяют необходимость программной реализации случайных величин с некоторым заданным законом распределения. При этом обычно существуют несколько альтернативных вариантов генерации случайной величины с нужным распределением, различающихся точностью, эффективностью и сложностью. Точность определяет, насколько точно распределение генерируемых случайных величин соответствует требуемому. Эффективность определяется требуемым объемом памяти и быстродействием. Сложность определяется сложностью понимания и реализации метода.
Рассмотрим способы решения задачи моделирования случайной величины с требуемым законом распределения.
Пусть требуется смоделировать непрерывную случайную величину X с плотностью распределения f(x). Задача решается путем моделирования последовательности случайных чисел, равномерно распределенных на интервале [0;1), и преобразования последовательности случайных чисел rv г2, ..., гп в последовательность xvx2, ..., хп с помощью некоторой функции
связывающей случайные числа с равномерным распределением со случайными числами с заданным распределением. Преобразование (4.1) может быть выполнено различными методами.
Метод обратных функций
Метод обратных функций используется для генерирования случайной величины X, заданной функцией распределения F(x).
Данный метод основан на следующей лемме.
Лемма. Если случайная величина ? имеет плотность распределения/^;), то случайная величина у = J f(x)dx = F(^) имеет равномерный закон распределения на интервале [0; 1).
Из данной леммы следует, что значение х случайной величины X с функцией распределения F(x) является решением уравнения
где г—значение случайной величины R, равномерно распределенной на интервале [0; 1); F(x) — функция распределения случайной величины X. Таким образом,
Отметим, что в выражении (4.2) верхний индекс «—1» является признаком обратной функции.
Для наглядности получение случайных величин методом обратных функций можно изобразить графически (рис. 4.1). Если по оси ординат брать случайные числа ri в диапазоне от 0 до 1 и находить для них, как показано стрелкой, соответствующие числа на оси абсцисс, то полученные значения xt будут являться значениями случайной величины X с функцией распределения F(x).

Рис. 4.1. Иллюстрация метода обратных функций
Таким образом, процедура получения значений случайной величины с заданной функцией распределения F(x) заключается в следующем:
- 1) реализация случайной величины R, равномерно распределенной на интервале [0;1);
- 2) вычисление значений случайной величины X по формуле x = F-](r).
Пример. Случайная величина Химеет равномерное распределение на интервале [а; Ь). Составить программу моделирования случайной величины Xна интервале [а; Ь).
Решете. Функция распределения случайной величины Xимеет вид
Согласно методу обратных функций
Откуда
Составим программу моделирования случайных величин на языке С#:
static void Main(string[] args)
{
Console.Write("Задайте левую границу интервала: "); double а = double.Parse(Console.ReadLine());
Console.Write("Задайте правую границу интервала: "); double b = double.Parse(Console.ReadLine());
Console.Write("Количество случайных величин n: "); int n = int.Parse(Console.ReadLine()) ;
Random random = new Random(); double r, x;
for (int i = 0; i < n; i++)
{
r = random.NextDouble(); x = a + r * (b — a);
Console.WriteLine("x[{0}] = {l:f3}", i + 1, x) ;
}
Console.WriteLine("Моделирование завершено");
Console.ReadLine() ;
}
Пример. Случайная величина X имеет экспоненциальный (показательный) закон распределения
где X — параметр распределения, X > 0.
Составить программу моделирования случайной величины X. Решение. Функция распределения случайной величины X
Согласно методу обратных функций
Получим
Так как случайная величина (1 - К) имеет то же самое распределение, что и R, то при нахождении значений случайной величины X пользуются формулой
Составим программу моделирования случайных величин на языке С#:
static void Main(string[] args)
{
Console.Write("Задайте параметр Lambda: "); double lambda = double.Parse(Console.ReadLine()); Console.Write("Количество случайных величин n: "); int n = int.Parse(Console.ReadLine());
Random random = new Random(); double r, x;
for (int i = 0; i < n; i++)
{
r = random.NextDouble(); x = -Math.Log(r) / lambda;
Console.WriteLine("x[(0}] = {l:f3}", i + 1, x) ;
}
Console.WriteLine("Моделирование завершено");
Console.ReadLine() ;
}
Отметим, что метод обратных функций является универсальным и точным методом генерирования случайной величины X, заданной функцией распределения F(x). Однако он не применим в случае, если отсутствует конечная форма записи функции распределения. Кроме того, не всегда возможно аналитически решить уравнение (4.2).