clear
close all
echo on
% -------------------------------------------------------------------------
% Irányítástechnika II.
% 3. számítógépes gyakorlat
% Idõtartománybeli analízis
% -------------------------------------------------------------------------
% Folytonos idejû lineáris rendszer megadása állapotegyenletével:
% dx/dt = Ax(t) + Bu(t)
%  y(t) = Cx(t) + Du(t)
%
A = [-1 -2 -3; 4 -5 6; 7 8 -9];
B = [10 11; 12 13; 14 15];
C = [16 17 18; 19 20 21];
D = [22 23; 24 25];
%
sys = ss(A,B,C,D)
%
pause
% -------------------------------------------------------------------------
% Az A mátrix sajátértékei a rendszer stabilitásáról adnak információt
% -------------------------------------------------------------------------
%
eig(A)
% Mivel minden sajátérték negatív valós részû, a rendszer stabilis
pause
% -------------------------------------------------------------------------
% A rendszer sajátmozgását adott kezdeti feltétel és u = 0 esetén
% az állapotátviteli-mátrix segítségével számíthatjuk ki 
% -------------------------------------------------------------------------
%
x0 = [1; 1; 1];
t = 0:.05:10;
%
% Az állapotváltozók idõfüggvényének számítása
%
for ii = 1: length(t)    
    x(:,ii) = expm(A*t(ii))*x0;
    echo off;
end;
echo on;
plot(t,x); grid;
title('x(t)');
legend('x_1','x_2','x_3');
xlabel('t[s]')
%
pause
% -------------------------------------------------------------------------
% Beépített CST függvénnyel 
% -------------------------------------------------------------------------
%
[y,t,x] = initial(sys,x0);
figure;
plot(t,x); grid;
title('x(t)');
legend('x_1','x_2','x_3');
xlabel('t[s]')
%
% értékadás nélkül egybõl idõfüggvényeket rajzol
pause
% -------------------------------------------------------------------------
% A válasz számítása egységugrás bemenetre: u1 = u2 = 1(t)
% Mivel 2 bemenetû a rendszer a két bemenet hatását külön-külön vizsgáljuk,
% majd összeadjuk (szuperpozíció elv)
% -------------------------------------------------------------------------
%
% Az elsõ bemenet hatása a kimenetekre
[y_u1,x_u1] = step(A,B,C,D,1,t);
%
% A második bemenet hatása a kimenetekre
[y_u2,x_u2] = step(A,B,C,D,2,t);
%
% A két bemenet együttes hatása
y = y_u1+y_u2;
x = x_u1+x_u2;
%
close all
subplot(2,1,1); plot(t,x); grid;
title('x(t)');
xlabel('t[s]')
%
subplot(2,1,2); plot(t,y); grid;
title('y(t)');
xlabel('t[s]')
pause
%
% értékadás nélkül egybõl idõfüggvényt rajzolhatunk:
% -------------------------------------------------------------------------
subplot(1,2,1);step(A,B,C,D,1,t); title('Step Response from u1'); grid;
subplot(1,2,2);step(A,B,C,D,2,t); title('Step Response from u2'); grid;
%
pause
% -------------------------------------------------------------------------
% A sys változóval meghívva a függvényt minden bemenet-kimenet
% viszonylatában megkapjuk a válaszokat
% -------------------------------------------------------------------------
figure
step(sys); grid;
pause
% -------------------------------------------------------------------------
% A rendszer impulzusválasza is hasonlóan számítható
% -------------------------------------------------------------------------
impulse(sys); grid;
pause
% -------------------------------------------------------------------------
% Az állapotváltozók mozgását az állapottérben is ábrázolhatjuk
% A kapott görbét állapotrajektóriának nevezzük
% -------------------------------------------------------------------------
%
[y,t,x] = impulse(sys);
figure
plot3(x(:,1),x(:,2),x(:,3)); grid
pause
% -------------------------------------------------------------------------
% A válasz számítása tetszõleges bemenetre, adott kezdeti feltételre
% x0 = [1 2 3]'  
% u1 = 1(t)
% u2 = 1-exp(-t)
% -------------------------------------------------------------------------
%
t = 0:.05:10;
x0 = [1 2 3]';
u1 = ones(1,length(t));
u2 = 1-exp(-t);
u = [u1; u2];
[y,t,x] = lsim(sys,u,t,x0);
%
close all
subplot(2,1,1); plot(t,x); grid;
title('x(t)');
xlabel('t[s]')
legend('x_1','x_2','x_3');
%
subplot(2,1,2); plot(t,y); grid;
title('y(t)');
xlabel('t[s]')
legend('y_1','y_2');


pause;



echo off;
