hAxes=axes('Parent',hFig,'Color',[1 1 1],...
'Units','pixels','Position',[30 40 960 230],...
'FontSize',10);
xlabel('Time');
%---------- Описание компонентов для ввода данных
hEditn=uicontrol (hFig,'Style','edit',...
'BackgroundColor',[1 1 1],...
'Position',[190 380 50 20]);
hEditl=uicontrol (hFig,'Style','edit',...
'BackgroundColor',[1 1 1],...
'Position',[190 350 50 20]);
hEditm=uicontrol (hFig,'Style','edit',...
'BackgroundColor',[1 1 1],...
'Position',[190 320 50 20]);
hEditstat=uicontrol (hFig,'Style','edit',...
'BackgroundColor',[1 1 1],...
'Position',[400 320 50 20]);
%---------- Описание компонентов для отображения текстовой информации
hTxt1=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[10 380 180 15],...
'HorizontalAlignment','left',...
'String','Количество заявок');
hTxt2=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[10 350 180 15],...
'HorizontalAlignment','left',...
'String','Интенсивность потока отказов: ');
hTxt3=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[10 320 180 15],...
'HorizontalAlignment','left',...
'String','Интенсивность восстановления:');
hTxt4=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0 0 0],...
'Position',[250 275 1 125]);
hTxt5=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[260 340 200 50],...
'HorizontalAlignment','Center',...
'String','Проведение последовательности экспериментов с целью выявления средних значенй:');
hTxt6=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[490 370 140 20],...
'HorizontalAlignment','left',...
'String','-заявки получившие отказ');
hTxt7=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0 0 0],...
'Position',[460 275 1 125]);
hTxt8=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[470 380 15 15],...
'HorizontalAlignment','left',...
'FontSize',20,'ForegroundColor',[1 0 0],...
'String','*');
hTxt9=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[470 360 100 15],...
'HorizontalAlignment','left',...
'String','1-Система занята');
hTxt10=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[470 325 150 35],...
'HorizontalAlignment','left',...
'String','0.5-Система находиться в режиме ожидания');
hTxt11=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[260 320 135 15],...
'HorizontalAlignment','left',...
'String','Число прогонов системы:');
hTxt7=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0 0 0],...
'Position',[650 275 1 125]);
%---------- Описание компонентов-кнопок
hButStart=uicontrol (hFig,'Style','pushbutton',...
'Position',[190 290 50 20],...
'String','Начать',...
'Callback','dimon');
hButStart=uicontrol (hFig,'Style','pushbutton',...
'Position',[400 290 50 20],...
'String','Старт',...
'Callback','dimonstat');
function dimon;
global hAxes hEditn hEditl hEditm n
global hTxt1 hTxt2 hTxt3 hTxt4
%-----------Получаем информацию с полей ввода данных-----------
strn=get(hEditn,'String');
strl=get(hEditl,'String');
strm=get(hEditm,'String');
%-----------Конвертируем строковые переменные в числовые-------
n=str2num(strn);
l=str2num(strl);
m=str2num(strm);
%----------- Имитационная модель одноканальной СМО-------------
T(1)=0;
otkaz=0;
prinat=0;
axes(hAxes);
cla;
xlabel('Time');
plot([0,0],[0.4,0.4]);
f=true;
for i=1:1:n
hold on;
z(i)=-1/l*log(rand);
s(i)=-1/m*log(rand);
if f
konec=T(i)+s(i);
line([T(i),T(i)],[0.5,1]);
line([T(i),konec],[1,1]);
line([konec,konec],[1,0.5]);
end
T(i+1)=T(i)+z(i);
if (T(i+1)<konec)
otkaz=otkaz+1;
plot(T(i+1),1.05,'r*');
f=false;
else
prinat=prinat+1;
line([konec,T(i+1)],[0.5,0.5]);
f=true;
end; end;
function dimonstat;
global hFig hAxes hEditn hEditl hEditm hEditstat
global hTxt1 hTxt2 hTxt3 hTxt4 htxt12
%-----------Получаем информацию с полей ввода данных-----------
strn=get(hEditn,'String');
strl=get(hEditl,'String');
strm=get(hEditm,'String');
strstat=get(hEditstat,'String');
%-----------Конвертируем строковые переменные в числовые-------
n=str2num(strn);
l=str2num(strl);
m=str2num(strm);
stat=str2num(strstat);
%----------- Имитационная модель одноканальной СМО-------------
h=waitbar(0,'Please, wait until data proccesing...');
for k=1:1:stat
waitbar(k/stat,h);
T(1)=0;
otkaz=0;
prinat=0;
f=true;
for i=1:1:n
hold on;
z(i)=-1/l*log(rand);
s(i)=-1/m*log(rand);
if f
konec=T(i)+s(i);
end
T(i+1)=T(i)+z(i);
if (T(i+1)<konec)
otkaz=otkaz+1;
f=false;
else
prinat=prinat+1;
f=true;
end;
end;
udacha(k)=prinat;
neudacha(k)=otkaz;
end;
close(h);
axes(hAxes);
cla;
hTxt12=uicontrol (hFig,'Style','Text',...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[660 270 300 120],...
'HorizontalAlignment','left',...
'String',['В ходе проведения имитационного моделирования выявлено, что среднее число обсуженыых заявок =' num2str(sum(udacha)/k)...
', среднее число заявок, получивших отказ, =' num2str(sum(neudacha)/k)...
'. Коэффициент готовности ситемы равняется ' num2str(sum(udacha)/(sum(udacha)+sum(neudacha)))...
'. Среднее время осбуживание: ' num2str(sum(s)/n)]);
try
plot(udacha);
catch
errordlg('Пожалуйста, укажите число прогонов системы','ErrorMessage');
end
end
Если не можете добиться результата,
имитируйте кипучую деятельность
и бешеную активность.
(Из законов Мэрфи: следствие Эндрю)
Имитационные моделирование на сегодняшний день является мощным средством для анализа в случае, когда невозможно, либо слишком дорого проведение опытов на реальном объекте. Также имитационное моделирование показывает свое преимущество над аналитическим решением задачи, в случае, когда присутствует фактор времени, сложные причинные связи, случайные переменные.
Имитационное моделирование позволяет имитировать поведение системы, во времени. При чём плюсом является то, что временем в модели можно управлять: замедлять в случае с быстропротекающими процессами и ускорять для моделирования систем с медленной изменчивостью.
Таким образом имитация является востребованным методом моделирования в различных областях деятельности.
7. Список используемой литературы
1. Кельтон В.Д., Лоу А.М. “Имитационное моделирование. Классика CS.” 3-е изд. - СПб.: Питер
2. Мартынов. Н.Н. “Введение в MATLAB 6.x” –Кудиц-Образ: Москва 2002
3. http://matlab.exponenta.ru/