Построение генераторов случайных чисел. Интерфейс программы. Статический анализ выходных данных моделирования, страница 2

%***************************************************

%   Функция для генерирования экспоненциально

%   распределенной случайной величины

%   Входные параметры:

%        stream - номер нужного потока

%        mean - среднее значение генерируемой

%                   случайной величины

%   Выходные параметры:

%        result - случ. число с эксп. распределением

%                   из потока stream

%***************************************************

result = -mean * log(lcgrand(stream));

Для 1000 чисел, сгенерированных функцией expon с параметрами stream=1 и mean=0.8, получили:

Математическое ожидание: 0.82579

Дисперсия:                                1.6059

Графики плотности и распределения вероятности, а также корреляционный график, представлены на рисунках 1.1, 1.2, 1.3 соответственно.

Рис. 1.1. График плотности вероятности

Рис. 1.2. График распределения вероятности

Рис. 1.3. Корреляционный график

1.3 Построение генератора дискретных случайных чисел, распределенных равномерно

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

1)  Генерируем .

2)  Возвращаем , где i и j – минимальное и максимальное дискретные значения.

Листинг 1.2. Код на языке Matlab функции discrand

function [result] = discrand(stream, first, last)

%***************************************************

%   Функция для генерирования равномерно

%   распределенной дискретной случайной величины

%   Входные параметры:

%       stream - номер нужного потока

%       first - наименьшее значение генерируемой

%              случайной величины

%       last - наибольшее значение генерируемой

%              случайной величины

%   Выходные параметры:

%       result - дискретное случ. число с равномерным

%              распределением из потока stream и

%              интервала [first, last]

%***************************************************

U = lcgrand(stream);

result = first + floor((last-first+1) * U);

1.4 Построение генератора случайных чисел u(0, 1), распределенных равномерно

Для генерирования случайных чисел с равномерным распределением используется функция lcgrand. Данная функция - мультипликативный линейный конгруэнтный генератор с простым модулем, заданный формулой  (листинг 1.3).

Листинг 1.3. Код на языке Matlab функции lcgrand

function [u] = lcgrand(stream)

%***************************************************

%    Мультипликативный линейный конгруэнтный

%   генератор случайного числа с простым

%   модулем. Поддерживает множественные потоки (3)

%   Входные параметры:

%       stream - номер нужного потока

%   Выходные параметры:

%       u - случ. число из интервала (0, 1)

%           в потоке stream

%***************************************************

global Z;

if isempty(Z)

Z = [640690903, 1774806513, 2132545692];

end;

Z(stream) = mod( 630360016*Z(stream), 2^31-1);

u = Z(stream)/(2^31);


§2. ЛОГИКА ПРОГРАММЫ.

ИНТЕРФЕЙС

2.1 Алгоритм работы программы

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

Программа содержит следующие компоненты (рисунок 2.1):

·  состояние системы — совокупность переменных состояния, необходимых для описания системы в определенный момент времени;

·  часы модельного времени — переменная, указывающая текущее значение модельного времени;

·  список событий — список, содержащий время возникновения каждого последующего типа событий

Типы событий:

1 – Поступление требования

2 – Уход требования (освобождение какого-либо устройства)

3 – Конец моделирования

·  статистические счетчики — переменные, предназначенные для хранения статистической информации о характеристике системы;

·  программа инициализации — подпрограмма, устанавливающая в исходное состояние имитационную модель в момент времени, равный 0;