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

A=[-0.9 0.01;1 -2];
B=[1 -7;0 -2];
C=[2 0;0 3];
D=[0 0;0 0];

switch flag,
case 0
   [sys,x0,str,ts] = mdlInitializeSizes; 
case 1
   sys = mdlDerivatives(t,x,u,A,B); 
case 3
   sys = mdlOutputs(t,x,u,C,D); 
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 = 1; % = 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,A,B) % vypocet derivaci: do tejto funkcie vkladame vlastne udaje - rovnice dynamiky
sys = A*x + B*u;

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