% Esercitazione Fondamenti di Automatica 
% e Teoria dei Sistemi
%
% (Ultima modifica 19/03/99)
%
% MODI NATURALI: 
% 3 modi naturali aperiodici - 2 stabili - 1 instabile
%
% 1-) eccitabilità con impulsi in ingresso
% 2-) osservabilità in uscita
% 3-) evoluzioni lungo gli autospazi
% 4-) risposta impulsiva nello stato
% 5-) evoluzione libera in uscita con cond. iniz. 
%     lungo gli autovettori
% 6-) risposta impulsiva in uscita



echo off
clc
close all
clear all

% Sistema 
A=[-5  1    2;
   0  -0.1  1;
   0   0    2];
B=[1 1 0]';
C=[0 1 1];

echo on
% Sistema considerato

A
B
C
echo off
pause

% Calcolo autovalori ed autovettori

[u,l]=eig(A);
v=inv(u);

la1=l(1,1);
la2=l(2,2);
la3=l(3,3);
u1=u(:,1);
v1=v(1,:);
u2=u(:,2);
v2=v(2,:);
u3=u(:,3);
v3=v(3,:);


echo on
clc
% Gli autovalori sono
la1
la2
la3
% e sono reali distinti.
echo off
pause
clc
echo on

% Primo autovalore 

la1

% Autovettori

u1

v1

echo off

pause

echo on

% Verifica eccitabilità: v1'B <> 0

v1*B

% soddisfatta -> modo naturale eccitabile con impulsi in ingresso
echo off

pause

echo on
% Verifica osservabilità: C u1 <> 0

C*u1

% non soddisfatta -> modo naturale non osservabile
echo off
pause

clc
echo on
% Secondo autovalore 

la2

u2

v2

pause

% Verifica eccitabilità

v2*B

pause

% Verifica osservabilità

C*u2

pause

clc
% Terzo autovalore 

la3

u3

v3

pause

% Verifica eccitabilità

v3*B

pause

% Verifica osservabilità

C*u3

pause
echo off
clc

% Calcolo evoluzione libera con cond. iniz. 
% parallele agli autovettori destri

t=0:0.005:30;
[y1,x1,t]=initial(A,B,C,0,u1,t);
[y2,x2,t]=initial(A,B,C,0,u2,t);
[y3,x3,t]=initial(A,B,C,0,u3,t);

[y4,x4,t]=impulse(A,B,C,0,1,t);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PRIMO ANDAMENTO CON x0 = u1      %
% condizione iniziale appartenente %
% all'autospazio generato da u1    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ev. libera lungo i relativi autovettori
% (proiezioni)

clc
figure(1)
clf
plot3([0,u1(1)],[0,u1(2)],[0,u1(3)],'r')
text(u1(1)+.07,u1(2),u1(3),'u1')
hold on
grid on
plot3([0,u2(1)],[0,u2(2)],[0,u2(3)],'r')
text(u2(1),u2(2)+0.2,u2(3),'u2')
plot3([0,u3(1)],[0,u3(2)],[0,u3(3)],'r')
text(u3(1),u3(2),u3(3)+0.1,'u3')
axis([0,1.5,-0.5,1,-0.5,1]);
title('Condizioni iniziali su u1');
plot3(u1(1),u1(2),u1(3),'b*')
xlabel('x1');
ylabel('x2');
zlabel('x3');
pause
hold off

figure(2)
clf
grid on
subplot(311)
% Proiezione lungo il primo autospazio
plot(t,x1*v1'),grid
title('Evoluzione libera lungo i tre autovettori')
subplot(312)
% Proiezione lungo il secondo autospazio
plot(t,x1*v2'),grid  
subplot(313)
% Proiezione lungo il terzo autospazio
plot(t,x1*v3'),grid
pause

figure(3)
clf
% Evoluzione nello spazio di stato
plot3([0,u1(1)],[0,u1(2)],[0,u1(3)],'r')
text(u1(1)+.07,u1(2),u1(3),'u1')
hold on
grid on
plot3([0,u2(1)],[0,u2(2)],[0,u2(3)],'r')
text(u2(1),u2(2)+0.2,u2(3),'u2')
plot3([0,u3(1)],[0,u3(2)],[0,u3(3)],'r')
text(u3(1),u3(2),u3(3)+0.1,'u3')
axis([0,1.5,-0.5,1,-0.5,1]);
xlabel('x1');
ylabel('x2');
zlabel('x3');
title('Evoluzione nel tempo')
pause
plot3(x1(:,1),x1(:,2),x1(:,3),'b*')
hold off
pause

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% SECONDO ANDAMENTO CON x0 = u2    %
% condizione iniziale appartenente %
% all'autospazio generato da u2    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ev. libera lungo i relativi autovettori

figure(1)
clf
plot3([0,u1(1)],[0,u1(2)],[0,u1(3)],'r')
text(u1(1)+.07,u1(2),u1(3),'u1')
hold on
grid on
plot3([0,u2(1)],[0,u2(2)],[0,u2(3)],'r')
text(u2(1),u2(2)+0.2,u2(3),'u2')
plot3([0,u3(1)],[0,u3(2)],[0,u3(3)],'r')
text(u3(1),u3(2),u3(3)+0.1,'u3')
axis([0,1.5,-0.5,1,-0.5,1]);
xlabel('x1');
ylabel('x2');
zlabel('x3');
title('Condizioni iniziali su u2')
plot3(u2(1),u2(2),u2(3),'b*')
pause
hold off

figure(2)
clf
subplot(311)
% Proiezione lungo il primo autospazio
grid on
plot(t,x2*v1'),axis([0,30,-1,1]),grid
title('Evoluzione libera lungo i tre autovettori')
subplot(312)
% Proiezione lungo il secondo autospazio
plot(t,x2*v2'),grid
subplot(313)
% Proiezione lungo il terzo autospazio
plot(t,x2*v3'),grid
pause

figure(3)
clf
% Evoluzione nello spazio di stato
plot3([0,u1(1)],[0,u1(2)],[0,u1(3)],'r')
text(u1(1)+.07,u1(2),u1(3),'u1')
hold on
grid on
plot3([0,u2(1)],[0,u2(2)],[0,u2(3)],'r')
text(u2(1),u2(2)+0.2,u2(3),'u2')
plot3([0,u3(1)],[0,u3(2)],[0,u3(3)],'r')
text(u3(1),u3(2),u3(3)+0.1,'u3')
axis([0,1.5,-0.5,1,-0.5,1]);
xlabel('x1');
ylabel('x2');
zlabel('x3');
title('Evoluzione nel tempo')
pause
plot3(x2(:,1),x2(:,2),x2(:,3),'b*')
pause
hold off

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% SECONDO ANDAMENTO CON x0 = u3    %
% condizione iniziale appartenente %
% all'autospazio generato da u3    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ev. libera lungo i relativi autovettori

figure(1)
clf
plot3([0,u1(1)],[0,u1(2)],[0,u1(3)],'r')
text(u1(1)+.07,u1(2),u1(3),'u1')
hold on
grid on
plot3([0,u2(1)],[0,u2(2)],[0,u2(3)],'r')
text(u2(1),u2(2)+0.2,u2(3),'u2')
plot3([0,u3(1)],[0,u3(2)],[0,u3(3)],'r')
text(u3(1),u3(2),u3(3)+0.1,'u3')
axis([0,1.5,-0.5,1,-0.5,1]);
xlabel('x1');
ylabel('x2');
zlabel('x3');
title('Condizioni iniziali su u3')
plot3(u3(1),u3(2),u3(3),'b*')
hold off

pause

figure(2)
clf
% Proiezione lungo il primo autospazio
subplot(311)
plot(t,x3*v1'),axis([0,30,-1e20,1e20]),grid
grid on
title('Evoluzione libera lungo i tre autovettori')
subplot(312)
% Proiezione lungo il secondo autospazio
plot(t,x3*v2'),axis([0,30,-1e20,1e20]),grid
subplot(313)
% Proiezione lungo il terzo autospazio
plot(t,x3*v3'),grid
pause

figure(3)
clf
% Evoluzione nello spazio di stato
plot3([0,u1(1)],[0,u1(2)],[0,u1(3)],'r')
text(u1(1)+.07,u1(2),u1(3),'u1')
hold on
grid on
plot3([0,u2(1)],[0,u2(2)],[0,u2(3)],'r')
text(u2(1),u2(2)+0.2,u2(3),'u2')
plot3([0,u3(1)],[0,u3(2)],[0,u3(3)],'r')
text(u3(1),u3(2),u3(3)+0.1,'u3')
xlabel('x1');
ylabel('x2');
zlabel('x3');
pause
plot3(x3(:,1),x3(:,2),x3(:,3),'b*')
title('Evoluzione nel tempo')
pause
clc
hold off

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Risp. impulsiva nello stato   %
% per verificare l'eccitabilità %
% dei modi naturali             %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(4)
clf
subplot(311)
plot(t,x4*v1'),grid
title('Risposta impulsiva nello stato: proiezioni lungo gli autovettori')
subplot(312)
plot(t,x4*v2'),grid
subplot(313)
plot(t,x4*v3'),grid
pause


figure(5)
clf
plot3([0,u1(1)],[0,u1(2)],[0,u1(3)],'r')
text(u1(1)+.07,u1(2),u1(3),'u1')
hold on
grid on
plot3([0,u2(1)],[0,u2(2)],[0,u2(3)],'r')
text(u2(1),u2(2)+0.2,u2(3),'u2')
plot3([0,u3(1)],[0,u3(2)],[0,u3(3)],'r')
text(u3(1),u3(2),u3(3)+0.1,'u3')
axis([0,1.5,-0.5,1,-0.5,1]);
xlabel('x1');
ylabel('x2');
zlabel('x3');
pause
plot3(x4(:,1),x4(:,2),x4(:,3),'b*')
hold off

pause

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ev. libera in uscita           %
% per verificare l'osservabilità %
% dei modi naturali              %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(6)
clf
grid on
subplot(311)
plot(t,y1),grid
title('Evoluzione libera in uscita: c.i. su u1, u2, u3')
subplot(312)
plot(t,y2),grid
subplot(313)
plot(t,y3),grid
pause

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Risp. impulsiva in uscita             %
% per verificare la contemporanea       %
% eccitabilità con impulsi in ingresso  %
% e osservabilità                       %
% dei modi naturali                     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


figure(7)
clf
grid on
subplot(312)
plot(t,y4),grid
title('Risposta impulsiva in uscita')


