% Projeto de Controle usando LGR
% Considere  a planta G(z)=\frac{z(z+1)}{(z-0,1)(z-0,5)}. Deseja-se construir um sistema de controle que atenda deteminadas característicaas de tempo de estabilização, erro em regime e overshoot.
% Primeiramente, observe que o sistema em malha fechada com controlador C(z)=1 e realimentação unitária negativa, leva a
% F(z)=\frac{z(z+1)}{2z^2+0,4z+0,05}=\frac{0,5z(z+1)}{z^2+0,2z+0,025}

G=tf([1 1 0],[1 -0.6 0.05],1);
F=feedback(G,1)

% Para este sistema, o tempo de estabilização pode ser aproximado como

xiwn=log(abs(max(pole(F))));
ts=log(0.02)/xiwn

% De fato, tomando

step(F)

% Este sistema, possui, no entanto, erro em regime não nulo e overshoot de aproximadamente 10%.
% Considerando um controlador proporcional, temos o LGR deste sistema como

rlocus(G)

%
% Tomando os requisitos de tempo de acomodação t_s<4~[{\rm s}], overshoot M_p<10%% e erro nulo em regime. Pode-se observar que o sistema já satisfaz os requisitos de tempo de acomodação e overshoot. (<sisotool(G)> - Adicione os dois requisitos para visualizar a região de projeto.). No etanto o erro em regime não é atendido. Para isso, sabe-se que precisamos adicionar um polo em z=1. Fazendo isso com o sisotool, nota-se que o LGR não passa mais pela região desejada de projeto.
% Uma possível solução para atender todos os requisitos é adicionarmos um zero em z=0,5 e prosseguir com o projeto. Agora, os requisitos são facilmente atendidos para k=0,5.
% Deve-se notar que, na prática, cancelamento de polos e zeros não são perfeitos, mas os efeitos são consideravelmente cancelados. Verifique!