% Sintesi mediante il luogo delle radici
% rif: Esercizio 3.5, libro Lanari-0riolo

clear all,clg,echo on

% eq stato processo

A=[0 2;-1 -3];
B=[1;-1];
C=[-1 -2];
D=0;
pause

% determiniamo la funzione di trasferimento del processo

[numP,denP]=ss2tf(A,B,C,D)
pause

% processo modificato con l'aggiunta del polo nell'origine (astatismo 
% disturbo costante)e una coppia di poli in j e -j (astatismo disturbo 
% sinusoidale di pulsazione unitaria)
% il polinomio da aggiungere a denominatore e' dunque s(s^2+1)=s^3+s

numPhat=numP;
denPhat=conv(denP,[1 0 1 0]);
pause

% basta un guadagno? vediamo il luogo positivo

rlocus(numPhat,denPhat)
pause

% luogo negativo

rlocus(-numPhat,denPhat)
pause

% niente da fare; poiche' pero' il sistema e' a fase minima,
% conviene innanzitutto ridurre l'eccesso poli-zeri a 2 aggiungendo 2 zeri
% qui e' addirittura possibile farlo senza spostare il centro degli asintoti,
% che e' gia' nel semipiano sinistro: basta aggiungere 2 zeri in -0.5
% il controllore, che ha tre poli, sara' comunque realizzabile

numF=conv(numPhat,[1 1 0.25]);
denF=denPhat;

% e il luogo positivo diventa 

rlocus(numF,denF);
pause

% basterebbe un guadagno positivo per avere stabilita' asintotica ma 
% qui si richiedono autovalori con parte reale minore o uguale a -0.3;
% si puo'determinare un valore adeguato del guadagno usiamo l'istruzione 
% rlocfind facendo click in un ramo del luogo contenuto nel semipiano sinistro
% a sinistra dell'ascissa -0.3

rlocfind(numF,denF)

% oppure possiamo anche verificare l'analisi basata sul criterio di Routh
% con il valore limite del guadagno, un polo dovrebbe avere 
% parte reale pari a -0.3

pause
poles=rlocus(numF,denF,13.90)

% vedi il file Es35sim.m per una simulazione del comportamento del sistema
