%% Ejemplo Asignación de Polos
% © 2018, Antonio Sala Piqueras, Universitat Politècnica de València. Todos los derechos reservados.
% Este código ejecutó sin errores en Matlab R2018b.

A=[1 2;3 4]; B=[5;6];
syms s k1 k2 real
K=[k1 k2]
Abuclecerrado=A-B*K

eccarac=det(s*eye(2)-Abuclecerrado)
%agrupemos coeficientes de s
eccaract2=collect(eccarac,s)
% tiempo de establecimiento de 0.5 segundos
testdeseado=0.5;
polo=-4/0.5*1.5 %polo doble, multiplicamos por 1.5 para hacerlo más rápido.
%construimos el polinomio
Pdeseado=(s-polo)^2
%por coeficientes de s
collect(Pdeseado,s)
%resolvemos que se igualen los coeficientes
sol=solve(coeffs(eccaract2,s)==coeffs(Pdeseado,s));
Kresultado=eval([sol.k1 sol.k2])
%comprobamos los polos resultantes
Abuclecerrado=A-B*Kresultado;
eig(Abuclecerrado)
%simulamos la respuesta:
condiniciales=[4;0];
proceso_bucle_cerrado=ss(Abuclecerrado,zeros(2,1),eye(2),zeros(2,1));
initial(proceso_bucle_cerrado,condiniciales)
grid on
%matlab lo hace todo en una linea:
copiadeK=place(A,B,[polo polo+0.00001])