% Calcolo evoluzione libera per una matrice dinamica A 2x2
% scelta dall'utente attraverso autovalori e autovettori reali;
% la condizione iniziale e' specificata in modo interattivo

close all
clear all

% assegnare arbitrariamente due autovettori reali
v1=[1;-5];
v2=[2;2];

% assegnare arbitrariamente due autovalori reali
l1=-1;		        
l2=2;		

% la corrispondente matrice dinamica viene costruita 
% a partire dalla forma spettrale

U=inv([v1';v2']');         

A=l1*v1*U(1,:)+l2*v2*U(2,:)

B=[0;0];   % ininfluente per lo studio dell'evoluzione libera 
C=[0 0];   % ininfluente per lo studio dell'evoluzione libera dello stato
D=0;       % ininfluente per lo studio dell'evoluzione libera 

pause

T = 1;
while T==1,
    figure(1)
    hold off
    clf
   % plot rette degli autovettori
    plot([-2*v1(1),2*v1(1)],[-2*v1(2),2*v1(2)],':r');
    hold on
    plot([-2*v2(1),2*v2(1)],[-2*v2(2),2*v2(2)],':r');
   % plot autovettori
    plot([0,v1(1)],[0,v1(2)],'g');
    text(v1(1)+0.3,v1(2),'v1');
    plot([0,v2(1)],[0,v2(2)],'g');
    text(v2(1)+0.3,v2(2)-0.2,'v2');
   % plot assi
    plot([-10,10],[0,0],'--y');
    plot([0,0],[-10,10],'--y');
   % prompt utente e acquisizione condizione iniziale
    disp('Scegliere la condizione iniziale facendo click col mouse')
    [a,b]=ginput(1);
    x0=[a;b];
   % calcolo corrispondente evoluzione libera
    [y,x,t]=initial(A,B,C,D,x0);
   % plot componenti x0 lungo v1 e v2
    c1=U(1,:)*x0;
    c2=U(2,:)*x0;
    plot(c1*v1(1),c1*v1(2),'w*'); 
    plot(c2*v2(1),c2*v2(2),'w*'); 
   % plot evoluzione libera	
    plot(x(:,1),x(:,2),'c');
	title('evoluzione libera nello stato')
    pause
    figure(2)
    clf
   % plot componenti lungo v1 e v2	 
    subplot(211),plot(t,U(1,:)*x'),grid
    title('componente lungo v1')
    subplot(212),plot(t,U(2,:)*x'),grid
    title('componente lungo v2')
    pause
    figure(3)
    clf
   % plot componenti lungo x1 e x2	 
    subplot(211),plot(t,x(:,1)),grid
    title('componente lungo asse x1')
    subplot(212),plot(t,x(:,2)),grid
    title('componente lungo asse x2')
   % altre condizioni iniziali?	
    T=input('digitare 1 per ricominciare, 0 per interrompere:  ');
end;




