Lugar geométrico de las raíces con Matlab - …dea.unsj.edu.ar/control2/Clase04c_LR.pdf · Scrip...

23

Transcript of Lugar geométrico de las raíces con Matlab - …dea.unsj.edu.ar/control2/Clase04c_LR.pdf · Scrip...

Lugar geométrico de

las raíces con Matlab

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

Ejemplo con scrip propia

% 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

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.

Asíntotas con Matlab (K > 0)

% ---------- 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)

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.

Un poco de historia, la Spirule

Esto se utilizaba en la época

precalculadora!!

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.