function [sys,x0,str,ts] = spojs(t,x,u,flag)
%s-funkcia pre dynamicky system opisany
%dx1/dt=-.9*x1+.01*x2+u1-7*u2, x1(0)=0
%dx2/dt=x1-2*x2-2*u2, x2(0)=0
%y1=2*x1
%y2=3*x2

switch flag,
case 0
   [sys,x0,str,ts] = mdlInitializeSizes; 
case 1
   sys = mdlDerivatives(t,x,u);
case 3
   sys = mdlOutputs(t,x,u);
case {2, 4, 9} 
   sys = [];
otherwise
   error(['unhandled flag = ',num2str(flag)]);
end;

function [sys,x0,str,ts] = mdlInitializeSizes % inicializacia: do tejto funkcie vkladame vlastne udaje
sizes = simsizes;
sizes.NumContStates  = 2; % pocet spojitych stavov
sizes.NumDiscStates  = 0; % pocet diskretnych stavov
sizes.NumOutputs     = 2; % pocet vystupov
sizes.NumInputs      = 2; % pocet vstupov
sizes.DirFeedthrough = 0; % = 0 v pripade, ze v rovniciach vystupu nevystupuje u alebo nevystupuje matica D. Inak =1.
sizes.NumSampleTimes = 1; % = 1 pre spojite systemy
sys = simsizes(sizes); 
x0=[0 0]; % zaciatocne podmienky pre dif. rovnice
str = []; % str je prazdna matica
ts = [0 0]; % velkost periody vzorkovania, pre spojite systemy =[0 0]
  

function sys = mdlDerivatives(t,x,u) % vypocet derivaci: do tejto funkcie vkladame vlastne udaje - rovnice dynamiky
sys(1) = -.9*x(1)+.01*x(2)+u(1)-7*u(2);
sys(2) = x(1)-2*x(2)-2*u(2);


function sys = mdlOutputs(t,x,u)  % vypocet vystupov: do tejto funkcie vkladame vlastne udaje - rovnice vystupu
sys(1)=2*x(1);
sys(2)=3*x(2);
