- •1. Методические указания
- •Имитационное моделирование простого события
- •Имитационное моделирование полной группы несовместных событий
- •Имитационное моделирование дискретной случайной величины
- •Метод обратной функции имитационного моделирования непрерывной случайной величины
- •Имитационное моделирование случайных величин с показательным распределением
- •Имитационное моделирование случайных величин с равномерным распределением
- •Имитационное моделирование случайных величин с нормальным распределением
- •Имитационное моделирование случайных величин с усеченным нормальным распределением
- •Имитационное моделирование случайных величин с произвольным распределением
- •Программная реализация имитационной модели случайных событий
- •Программная реализация имитационной модели дискретных случайных величин
- •Программная реализация имитационной модели непрерывных случайных величин
- •2. Задания для самостоятельного выполнения практических занятий
- •Библиографический список
Имитационное моделирование случайных величин с усеченным нормальным распределением
Понятие усеченного нормального распределения.
Параметры распределения:
математическое ожидание M(Y) нормального распределения;
среднеквадратическое отклонение (Y) нормального распределения;
максимальное и минимальное значения и(точки усечения).
Функция распределения:
где ;;;.
Задача. Требуется смоделировать случайную величину Y, имеющую усеченное нормальное распределение с математическим ожиданием M(Y) нормального распределения, среднеквадратическим отклонением (Y) нормального распределения и точками усечения и, с помощью случайной величины с равномерным распределением на отрезке [0,1].
Принцип моделирования. Используется процедура имитационного моделирования нормального распределения и дополняется процедурой усечения.
Алгоритм моделирования (рис. 3).
Оператор 1 обращается к процедуре моделирования случайной величины Y, нормально распределенной с заданными параметрами M(Y) и (Y).
Оператор 2 проверяет условие попадания случайной величины Y в неусеченную область. При выполнении этого условия значение случайной величины Y с усеченным нормальным распределением считается найденным. В противном случае управление в алгоритме передается вновь на вход оператора 1, и генерируется другая случайная величина.
Имитационное моделирование случайных величин с произвольным распределением
Задача. Требуется смоделировать случайную величину Y с заданной плотностью распределения f(x) при помощи случайной величины , равномерно распределенной на отрезке [0,1].
Принцип моделирования. Плотность распределения f(x) аппроксимируется кусочно-постоянной функцией, определенной на интервале . Это значит, что данный интервал разбит наn частичных интервалов ,, плотность распределения на каждом из которых принимается постоянной. Величины,, выбираются так, чтобы вероятности попадания в любой частичный интервал были одинаковы, т.е.
, .
Попадание случайной величины Y в любой частичный интервал можно рассматривать как событие, входящее в ПГНС. А если случайная величина Y попадает в данный частичный интервал, то имеет на нем равномерное распределение.
Алгоритм моделирования.
Основные этапы моделирования.
С помощью датчика случайных чисел с равномерным распределением, вырабатывающего величину , моделируют дискретную случайную величину – номер интервала k.
Вторично разыгрывают случайную величину и определяют возможное значение случайной величины Y при условии ее попадания в найденный интервал k:
, .
Схема алгоритма показана на рис. 4.
Программная реализация имитационной модели случайных событий
Алгоритмы имитационного моделирования случайных факторов в форме случайных событий, описанные в п. 3, 4, реализованы в среде программирования Borland Delphi 7. Windows-окно формы программы представлено на рис. 5. Код программы приведен ниже.
unit Unit1;{Имитационное моделирование случайных событий}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Grids;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;{ИМ прост. соб-я (верхняя панель)}
GroupBox2: TGroupBox;{ИМ ПГНС (нижняя панель)}
Label1: TLabel;{Вероятность наступления события}
Edit1: TEdit;{Вероятность наступления события}
Button1: TButton;{Реализация (на верхней панели)}
RadioGroup1: TRadioGroup;{Результат реализации}
Label2: TLabel;{ДСЧ (на верхней панели)}
Edit2: TEdit;{ДСЧ (на верхней панели)}
Label3: TLabel;{Количество событий}
Edit3: TEdit;{Количество событий}
StringGrid1: TStringGrid;{Вероятности наступления событий}
Label4: TLabel;{Вероятности наступления событий}
Label5: TLabel;{Точки разбиения единичного отрезка}
StringGrid2: TStringGrid;{Точки разбиения единичного отрезка}
Button2: TButton;{Реализация (на нижней панели)}
Label6: TLabel;{ДСЧ (на нижней панели)}
Label7: TLabel;{Происшедшее событие}
Edit4: TEdit;{ДСЧ (на нижней панели)}
Edit5: TEdit;{Происшедшее событие}
procedure Button1Click(Sender: TObject);
procedure Edit3Change(Sender: TObject);
procedure StringGrid1Exit(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const Max=1000;{Максимальное значение индекса массива}
var
PA:extended;{Вероятность наступления события}
P:array[1..Max] of extended;{Массив вер-тей наст-я событий}
L:array[1..Max] of extended; {Массив точек разб-я един. отрезка}
z:extended; {Реализация ДСЧ}
k:cardinal; {Количество событий}
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin{Определение реализации случайного события}
randomize;
PA:=StrToFloat(Edit1.Text);
z:=random; Edit2.Text:=FloatToStr(z);
if z<PA then RadioGroup1.ItemIndex:=0
else RadioGroup1.ItemIndex:=1;
end;
procedure TForm1.Edit3Change(Sender: TObject);
var i:cardinal;
begin{Подготовка к вводу параметров ПГНС}
k:=StrToInt(Edit3.Text);{Ввод количества событий}
StringGrid1.RowCount:=k+1; StringGrid2.RowCount:=k+1;
StringGrid1.Cells[0,0]:='Номер';
StringGrid1.Cells[1,0]:='Вероятность';
StringGrid2.Cells[0,0]:='Номер';
StringGrid2.Cells[1,0]:='Точка разбиения';
for i:=1 to k do
begin
StringGrid1.Cells[0,i]:=IntToStr(i);
StringGrid2.Cells[0,i]:=IntToStr(i);
end;
end;
procedure TForm1.StringGrid1Exit(Sender: TObject);
var i,j:cardinal;
begin{Определение точек разбиения единичного отрезка}
for i:=1 to k do
begin
P[i]:=StrToFloat(StringGrid1.Cells[1,i]);
L[i]:=0; for j:=1 to i do L[i]:=L[i]+P[j];
StringGrid2.Cells[1,i]:=FloatToStr(L[i]);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i:cardinal;
begin{Определение реализации ПГНС}
randomize; z:=random;
Edit4.Text:=FloatToStr(z);{Вывод реализации ДСЧ}
for i:=1 to k do
begin
if z<L[i] then
begin
Edit5.Text:=IntToStr(i);{Вывод происшедшего события}
break;
end;
end;
end;
end.
Рис. 5. Windows-окно формы программы имитационного моделирования случайных факторов в форме случайных событий