- •1. Методические указания
- •Имитационное моделирование простого события
- •Имитационное моделирование полной группы несовместных событий
- •Имитационное моделирование дискретной случайной величины
- •Метод обратной функции имитационного моделирования непрерывной случайной величины
- •Имитационное моделирование случайных величин с показательным распределением
- •Имитационное моделирование случайных величин с равномерным распределением
- •Имитационное моделирование случайных величин с нормальным распределением
- •Имитационное моделирование случайных величин с произвольным распределением
- •Программная реализация имитационной модели случайных событий
- •Имитационное моделирование случайных величин с усеченным нормальным распределением
- •Программная реализация имитационной модели дискретных случайных величин
- •Программная реализация имитационной модели непрерывных случайных величин
- •2. Задания для самостоятельного выполнения практических занятий
- •Библиографический список
Программная реализация имитационной модели дискретных случайных величин
Алгоритм имитационного моделирования случайных факторов в форме дискретных случайных величин, описанный в п. 5 на основе алгоритма из п. 4, реализован в среде программирования Borland Delphi 7. Windows-окно формы программы представлено на рис. 6. Код программы приведен ниже.
unit Unit1; {ИМ дискретных случайных величин}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;{Количество возможных значений}
Edit1: TEdit;{Количество возможных значений}
Label2: TLabel;{Табличное задание случайной величины}
StringGrid1: TStringGrid;{Табличное задание случ. величины}
Label3: TLabel;{Точки разбиения единичного отрезка}
StringGrid2: TStringGrid;{Точки разбиения единичного отрезка}
Button1: TButton;{Реализация}
Label4: TLabel;{ДСЧ}
Edit2: TEdit;{ДСЧ}
Label5: TLabel;{Значение реализации случайной величины}
Edit3: TEdit;{Значение реализации случайной величины}
procedure Edit1Change(Sender: TObject);
procedure StringGrid1Exit(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const Max=1000;{Максимальное значение индекса массива}
var
X:array[1..Max] of extended;{Массив возможных значений}
P:array[1..Max] of extended;{Массив вер. реализ. заданных знач.}
L:array[1..Max] of extended;{Массив точек разбиен. един. отрезка}
z:extended;{Реализация ДСЧ}
n:cardinal;{Количество возможных значений}
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject);
var i:cardinal;
begin{Подготовка к вводу параметров случайной величины}
n:=StrToInt(Edit1.Text);{Ввод кол-ва возможных знач. случ. вел.}
StringGrid1.RowCount:=n+1; StringGrid2.RowCount:=n+1;
StringGrid1.Cells[0,0]:='Номер';
StringGrid1.Cells[1,0]:='Значение';
StringGrid1.Cells[2,0]:='Вероятность';
StringGrid2.Cells[0,0]:='Номер';
StringGrid2.Cells[1,0]:='Точка разбиения';
for i:=1 to n 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 n do
begin
P[i]:=StrToFloat(StringGrid1.Cells[2,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.Button1Click(Sender: TObject);
var i:cardinal;
begin{Определение реализации случайной величины}
randomize; z:=random;
Edit2.Text:=FloatToStr(z);{Вывод реализации ДСЧ}
for i:=1 to n do
begin
if z<L[i] then
begin
Edit3.Text:=StringGrid1.Cells[1,i];{Вывод знач. реал. случ. вел.}
break;
end;
end;
end;
end.
Рис. 6. Windows-окно формы программы имитационного моделирования случайных факторов в форме дискретных случайных величин
