lugar geométrico de las raíces con matlab - …dea.unsj.edu.ar/control2/clase04c_lr.pdf · scrip...
TRANSCRIPT
Scrip propia: Es relativamente sencilloescribir uma secuencia de comandos de Matlab(scrip) que grafique el LR.
Comandos rlocus (para graficar el lugar
de las raíces) y rlocfind (para encontrar
el valor de la ganancia dado um conjunto
de raíces).
GUI rltool (Interface grafica Root-Locus Design Tool, es parte de sisotool).
GUI RLocusGui (Interface gráfica disponible en Matlab Central)
Alternativas para graficar el RL con Matlab
Ejemplo con scrip propia
% Ejemplo del lugar geométrico con scrip propia
clear, clc, close all
L=tf([6],[1 6 11 6]); %Igual a L=zpk([],[-1 -2 -3],6);
plot(pole(L)+eps*1i,'k*','MarkerSize',9), hold on
for K=0:.01:100;
Pc=[1 6 11 6+K]; p=roots(Pc);plot(p+eps*1i,'r.')%Importantes
end
xmin=-3.5;xmax=0.5;ymin=-5;ymax=5;axis([xmin xmax yminymax]);axis('square')
ejex=line([xmin xmax],[0 0],'LineStyle','-','Linewidth',1, 'Color','k');
ejey=line([0 0],[ymin ymax],'LineStyle','-','Linewidth',1, 'Color','k');
legend({'Lugar geométrico de los polos a lazo cerrado'}, 'FontSize',14,...
'FontWeight','bold','Location','North'); hold off
% El mismo L(s) en zpk, tf ó ss
L=zpk([-3],[0 -1 -2 -4],1)
[num,den]=tfdata(L,'v'); L=tf(num,den])
[A,B,C,D]=ssdata(L); L=ss(A,B,C,D)
rlocus(L) ó rlocus(A,B,C,D) ó rlocus(num,den)
% Graficación para un rango de K específico
K=0:.005:150;
rlocus(L,K) ó rlocus(A,B,C,D,K) ó rlocus(num,den,K)rlocus(L, 0:.005:150) , etc…
% Graficación con el comando plot
r= rlocus(L) plot(r,'o')
r= rlocus(L,K); plot(r,'o')[r,K] = rlocus(L) ó r= rlocus(L,K); plot(r,'o')
Comando de Matlab rlocus
Comando de Matlab rlocusclear, clc,close allL=zpk([-3],[0 -1 -2 -4],1);rlocus(L)xmin=-5;xmax=1;ymin=-2.5;ymax=2.5;axis([xmin xmax ymin ymax])
clear, clc,close allL=zpk([-3],[0 -1 -2 -4],1);rlocus(L)xmin=-5;xmax=1;ymin=-2.5;ymax=2.5;axis([xmin xmax ymin ymax])
Comando de Matlab rlocus
Mostrar edición de gráficos
clear, clc,close all
L=zpk([-3],[0 -1 -2 -4],1);
%Graficamos con plot
RL=rlocus(L);plot(RL,'.b');hold on; pzmap(L)
xmin=-5;xmax=1;ymin=-2.5;ymax=2.5;
ejex=line([0 0],[ymin ymax],'LineWidth',1,'Color','k'); %Eje real
ejex=line([xmin xmax],[0 0],'LineWidth',1,'Color','k'); %Eje imaginario
axis([xmin xmax ymin ymax]);
title('Lugar de las raíces','FontSize',16)
xlabel('Eje Real','FontSize',14); ylabel('Eje Imaginario','FontSize',14)
Comando de Matlab rlocus (graficación con plot)
clear, clc,close all
L=zpk([-3],[0 -1 -2 -4],1);
%Graficación para un rango K específico y el comando plot
K=0:0.1:100; r=rlocus(L,K);
plot(r,'.b');hold on; pzmap(L)
xmin=-5;xmax=1;ymin=-2.5;ymax=2.5;
ejex=line([0 0],[ymin ymax],'LineWidth',1,'Color','k'); %Eje real
ejex=line([xmin xmax],[0 0],'LineWidth',1,'Color','k'); %Eje imaginario
axis([xmin xmax ymin ymax]);
title('Lugar de las raíces','FontSize',16)
xlabel('Eje Real','FontSize',14); ylabel('Eje Imaginario','FontSize',14)
Hemos graficado con el comando plot para valores de K
espaciados uniformemente cada K=0.1. Se observa (zona círculo
rojo) que para K pequeño los puntos están muy espaciados y la gráfica se ve con “huecos”. Esto se mejora reduciendo el paso K
o utilizando distintos K según
la zona.
Comando de Matlab rlocus (graficación con plot y K específico)
clear, clc,close all
L=zpk([-3],[0 -1 -2 -4],1);
%Graficación para un rango K específico y el comando plot
k1=0:0.001:10;k2=10:.1:100;K=[k1 k2]; r=rlocus(L,K);
plot(r,'.b');hold on; pzmap(L)
xmin=-5;xmax=1;ymin=-2.5;ymax=2.5;
ejex=line([0 0],[ymin ymax],'LineWidth',1,'Color','k'); %Eje real
ejex=line([xmin xmax],[0 0],'LineWidth',1,'Color','k'); %Eje imaginario
axis([xmin xmax ymin ymax]);
title('Lugar de las raíces','FontSize',16)
xlabel('Eje Real','FontSize',14); ylabel('Eje Imaginario','FontSize',14)
Comando de Matlab rlocus (graficación con plot y K específico)
Comando de Matlab rlocfind
clear, clc,close all
L=zpk([-3],[0 -1 -2 -4],1)
rlocus(L)
axis([-5 1 -2.5 2.5 ])
[k,poles] = rlocfind(L)
[k,poles] = rlocfind(L)
Permite marcar con el mouse un punto
del root locus de L y devuelve al
espacio de trabajo el valor de k y
las posiciones de todas las raíces a
lazo cerrado para ese valor de k.
Asíntotas con Matlab
, 03(2 1) (2 1), 1
4 15
, 23
a
kk k
kpolos ceros
k
Re(polos) Re(ceros) ( 1 2 4) ( 3) 4
polos ceros 4 1 3a
Asíntotas con Matlab
Re(polos) Re(ceros)(centroide)
polos cerosa
asíntota polos ceros
1( )
( )a
L ss
Donde #polos - #ceros es el número de ramas que se van al infinito
rlocus(Lasíntota) % Dibuja las asíntotas
Definimos el sistema auxiliar con (#polos - #ceros) polos múltiples en el centroide
El lugar de las raíces de Lasíntota(s) coincide con las asíntotas del lugar de las raícesdel sistema original L.
Las asíntotas (si las hubiera) se intersectan en un punto del eje real denominado centroide.
% ---------- Lugar de las raíces y asíntotas ----------
% Para dibujar las asíntotas se hace el rlocus de un sistema equivalente con n polos
% en el centróide (sigma) donde n es el número de ramas que se van al infinito.
% sigma=(sum(pole(L))-sum(zero(L)))/(length(pole(L))-length(zero(L)))
clear; clc; close all
L=zpk([-3],[0 -1 -2 -4],1);
[ceros, polos]=zpkdata(L,'v');
sigma=(sum(polos)-sum(ceros))/(length(polos)-length(ceros)); % Posición del centróide
L_asintotas=zpk([],sigma*ones(length(polos)-length(ceros),1),1);
k1=0:0.001:10; k2=10:.1:100; k3=100:1:1000;
K=[k1 k2 k3]; r=rlocus(L,K); a=rlocus(L_asintotas,K);
plot(r,'b.','MarkerSize',6); hold on; plot(a,'k.','MarkerSize',2)
%Ahora se grafican los polos, los ceros y los ejes
plot(ceros+eps*1i,'ro','LineWidth',2,'MarkerSize',6), hold on
plot(polos+eps*1i,'r+','LineWidth',2,'MarkerSize',8),
xmin=-5; xmax=5; ymin=-5; ymax=5;
axis([xmin xmax ymin ymax]); axis('square')
ejex=line([0 0],[ymin ymax],'LineWidth',1,'Color','k'); %Eje real
ejex=line([xmin xmax],[0 0],'LineWidth',1,'Color','k'); %Eje imaginario
G='Lugar de las raíces de G(s)=K(s+3)/[s(s+1)(s+2)(s+4)] y asíntotas';
title(G,'FontName','Times','FontSize',16,'FontWeight','normal')
xlabel('Eje Real','FontSize',14); ylabel('Eje Imaginario','FontSize',14)
hold off
Asíntotas con Matlab (K > 0)
GUI rltool
clear, clc,close allL=zpk([-3],[0 -1 -2 -4],1);rltool(L) % Start root-locus design tool
% También se puede utilizar:
% sisotool('rlocus',L)
RLocusGui
clear, clc,close allL=tf(zpk([-3],[0 -1 -2 -4],1));RLocusGui(L) % L debe ser tf
RLocusGui es una interfaz gráfica que permiteaprender a dibujar el lugar de las raíces. Toma unafunción de transferencia y aplica las reglas paradibujar el lugar de las raíces a mano. Porsupuesto, Matlab puede hacer esto con másprecisión, pero es importante saber cómo lasubicaciones de los polos y ceros afectan elresultado final.
What little material I can find on the web places this device as the invention of thelate Walter R. Evans, a brilliant electrical engineer who developed the "Root‐LocusMethod" for designing automatic control systems.He then invented the Spirule to help "nail down specific points on the locus toestablish the gain to use and the exact natural frequency and damping that willresult". This device was manufactured by Evans's company in the 60's, and 100,000of them were actually shipped before personal computers took over.
"Duh...", you say, "Of course it's a Spirule! Everyone knows that!" Well ‐ I didn'tknow. This item in my collection has the distinction that I have absolutely no ideahow to use it, and this in spite of having a 16‐page instruction booklet. Ratherhumiliating...
The Spirule is made of clearsheet plastic, and consists of adisc that can rotate on a pivot ina wide rectangular ruler. Bothpieces are covered with graphs,scales and other markings. Thedevice is about 30 cm long.