% epälineaarisen viiveellisen differentiaaliyhtälön simulointiesimerkki

% määritetään differentiaaliyhtälö m-tiedostoon esim_ode_fun.m

% Ohjaukset ajanhetkillä 0,1,2,3,...,K;
h = 1; % ohjausväli [s]
%Simuloidaan systeemiä jossa sisäänmenossa u on d ohjausvälin viive
d = 2 % viive on h*d aikayksikköä
u = zeros(15,1); % alustetaan alkuarvot nolliksi
y = zeros(15,1);

% simuloidaan ohjausväli kerrallaan:
for k=1+d:15
    t(k) = (k-1)*h; % simuloinnin alkuhetki
    if k>3, u(k) = 1, else u(k) =0; end % askel hetkellä h*(k-1)
    % simuloidaan alkutilasta y(k) h:n verran ajassa eteenpäin:
    % - koodissa viedään viivästetty ohjaus u(k-d) lisäargumenttina
    %   ohjaus on vakio koko simulointi-intervallin t=kh..(k+1)h
    [tsim,ysim]=ode23( @(t,y) esim_ode_fun(t,y,u(k-d)), [0 h], y(k));
    y(k+1) = ysim(end); % luetaan y:n arvo simuloinnin lopussa
end
% simuloinnin tulokset ovat vektoreissa t, u ja y.
subplot(211); plot(t,u,'o-'); ylabel('u(t)');
subplot(212); plot(t,y(1:length(u)),'o-'); ylabel('y(t)');
shg