Sie sind auf Seite 1von 22

INSTITUTO TECNOLÓGICO SUPERIOR DE CAJEME

CRITERIO DE ESTABILIDAD DE NYQUIST

MATERIA: CONTROL II

PROFESOR: FLAVIO MUÑOZ

ALUMNO: JOSÉ JOVANNY SERVÍN BUITIMEA

3 DE NOVIEMBRE DE 2017
INTRODUCCIÓN
Se realizó la simulación de 6 plantas en Matlab y se determinó su estabilidad o inestabilidad según el
criterio de estabilidad de Nyquist. Posteriormente se realizó el análisis matemático de las mismas
plantas para obtener los resultados obtenidos por computadora.

ANTECEDENTES
Según Ogata (2010) el diagrama polar de una función de transferencia sinusoidal 𝑮(𝒋𝝎) es una
gráfica de la magnitud de 𝑮(𝒋𝝎) con respecto al ángulo de fase de 𝑮(𝒋𝝎) en coordenadas polares,
cuando ω varía de cero a infinito. Por tanto el diagrama polar es el lugar geométrico de los vectores
|𝑮(𝒋𝝎)|∠𝑮(𝒋𝝎) cuando ω varía de cero a infinito. A este tipo de diagrama también se le conoce
como diagrama de Nyquist y una de sus aplicaciones es servir para determinar la estabilidad de un
sistema según el criterio de estabilidad de Nyquist. El criterio de estabilidad de Nyquist determina la
estabilidad de un sistema a lazo cerrado a partir de la respuesta en frecuencia en lazo abierto y los
polos en lazo abierto. Este criterio se expresa de forma sintetizada en la ecuación 1.

𝒁=𝑵+𝑷 (𝟏)

Donde Z es el número de ceros de 𝟏 + 𝑮(𝒔)𝑯(𝒔) en el semiplano derecho del plano s. N es el


número de rodeos en el sentido de las agujas del reloj del punto -1+0j. P es el número de polos de
𝑮(𝒔)𝑯(𝒔) en el semiplano derecho del plano s.

En la figura 1 se ilustra este sistema a lazo abierto 𝑮(𝒔)𝑯(𝒔) con un diagrama a bloques.

Figura 1. Sistema a lazo abierto G(s)H(s)


𝑮(𝒔)
Y en la figura 2 se muestra a lazo cerrado 𝟏+𝑮(𝒔)𝑯(𝒔).
Figura 2. Diagrama a bloques del sistema a lazo cerrado
𝑮(𝒔)
Basándonos en la función de transferencia a lazo cerrado se puede observar que cuando
𝟏+𝑮(𝒔)𝑯(𝒔)
el denominador es 0 la respuesta del sistema es infinita, es decir, los ceros de 𝟏 + 𝑮(𝒔)𝑯(𝒔) son
los polos de la función de transferencia a lazo cerrado y son de especial interés en el estudio de la
estabilidad del sistema los polos en el semiplano derecho la función de transferencia, es decir, los
ceros en el semiplano derecho de 𝟏 + 𝑮(𝒔)𝑯(𝒔). La función 𝟏 + 𝑮(𝒔)𝑯(𝒔) se puede expresar
de la forma
(𝒔 − 𝒛𝒈𝟏 )(𝒔 − 𝒛𝒈𝟐 ) ⋯ (𝒔 − 𝒛𝒈𝒂 ) (𝒔 − 𝒛𝒉𝟏 )(𝒔 − 𝒛𝒉𝟐 ) ⋯ (𝒔 − 𝒛𝒉𝒄 )
𝟏+
(𝒔 − 𝒑𝒈𝟏 )(𝒔 − 𝒑𝒈𝟐 ) ⋯ (𝒔 − 𝒑𝒈𝒃 ) (𝒔 − 𝒑𝒉𝟏 )(𝒔 − 𝒑𝒉𝟐 ) ⋯ (𝒔 − 𝒑𝒉𝒅 )
(𝒔 − 𝒛𝒈𝟏 )(𝒔 − 𝒛𝒈𝟐 ) ⋯ (𝒔 − 𝒛𝒈𝒂 )(𝒔 − 𝒛𝒉𝟏 )(𝒔 − 𝒛𝒉𝟐 ) ⋯ (𝒔 − 𝒛𝒉𝒄 ) + (𝒔 − 𝒑𝒈𝟏 )(𝒔 − 𝒑𝒈𝟐 ) ⋯ (𝒔 − 𝒑𝒈𝒃 )(𝒔 − 𝒑𝒉𝟏 )(𝒔 − 𝒑𝒉𝟐 ) ⋯ (𝒔 − 𝒑𝒉𝒅 )
=
(𝒔 − 𝒑𝒈𝟏 )(𝒔 − 𝒑𝒈𝟐 ) ⋯ (𝒔 − 𝒑𝒈𝒃 )(𝒔 − 𝒑𝒉𝟏 )(𝒔 − 𝒑𝒉𝟐 ) ⋯ (𝒔 − 𝒑𝒉𝒅 )

Cabe destacar que

(𝒔 − 𝒛𝒈𝟏 )(𝒔 − 𝒛𝒈𝟐 ) ⋯ (𝒔 − 𝒛𝒈𝒂 ) (𝒔 − 𝒛𝒉𝟏 )(𝒔 − 𝒛𝒉𝟐 ) ⋯ (𝒔 − 𝒛𝒉𝒄 )


𝑮(𝒔)𝑯(𝒔) =
(𝒔 − 𝒑𝒈𝟏 )(𝒔 − 𝒑𝒈𝟐 ) ⋯ (𝒔 − 𝒑𝒈𝒃 ) (𝒔 − 𝒑𝒉𝟏 )(𝒔 − 𝒑𝒉𝟐 ) ⋯ (𝒔 − 𝒑𝒉𝒅 )

Es decir, los polos de 𝑮(𝒔)𝑯(𝒔) y los polos de 𝟏 + 𝑮(𝒔)𝑯(𝒔) son los mismos, lo que simplifica
bastante la tarea de determinar la estabilidad del sistema con el criterio de Nyquist.

Según Yang, Levine y otros (2011) este criterio se basa en la suposición de que todos los
controladores tienen un efecto lineal en el sistema.
DESARROLLO
Se trazó el diagrama de Nyquist de las siguientes funciones de transferencia utilizando Matlab para
las que fue necesario trazar el tramo IV se usó el script nyqlog, cuyo código e información del autor
fue anexada.

𝒔𝟐 + 𝟐𝒔 + 𝟏
𝑮(𝒔) = (𝟐)
𝒔𝟑 + 𝟎. 𝟐𝒔𝟐 + 𝒔 + 𝟏
𝟏
𝑮(𝒔) = (𝟑)
𝒔 + 𝟎. 𝟐𝒔 + 𝒔 + 𝟏
𝟏
𝑮(𝒔) = (𝟒)
𝒔(𝒔𝟐 + 𝒔 + 𝟎. 𝟓)
𝟐𝟎(𝒔 + 𝟏)
𝑮(𝒔) = (𝟓)
𝒔(𝒔 + 𝟓)(𝒔𝟐 + 𝟐𝒔 + 𝟏𝟎)
𝒔 + 𝟎. 𝟓
𝑮(𝒔) = (𝟔)
𝒔𝟐 +𝒔+𝟏
𝟏𝟎𝟎(𝒔 + 𝟎. 𝟓)
𝑮(𝒔) = (𝟕)
𝒔𝟐 (𝒔+ 𝟐)(𝒔 + 𝟏𝟎)

Se buscaron los polos a lazo abierto de 𝐺(𝑠)𝐻(𝑠) para determinar su estabilidad a lazo cerrado
con el criterio de Nyquist. Posteriormente se realizó el mismo procedimiento a mano para comprobar
los resultados. Por último se realizó una simulación en simulink para observar la estabilidad del
sistema a lazo cerrado.
RESULTADOS

PRIMER SISTEMA

Para el sistema descrito en la ecuación 2 se trazó el diagrama de Nyquist que se muestra en la


figura 3.

𝒔𝟐 + 𝟐𝒔 + 𝟏
𝑮(𝒔) = (𝟐)
𝒔𝟑 + 𝟎. 𝟐𝒔𝟐 + 𝒔 + 𝟏

Figura 3. Diagrama de Nyquist del primer sistema

Donde se observa que el número de rodeos al punto -1+0j es igual a -2.


En la figura 4 se muestra el lugar de las raíces del sistema.

Figura 4. Lugar de las raíces del primer sistema


Se observa que el número de polos del sistema en el semiplano derecho es igual a 2.

Según el criterio de estabilidad de Nyquist el número de ceros en el semiplano derecho de


1+G(s)H(s) que es el mismo número de polos en el semiplano derecho del sistema a lazo cerrado es
igual a -2+2=0, por lo tanto el primer sistema es estable.

Para corroborar el resultado se simuló el sistema a lazo cerrado con una entrada escalón unitario
como se muestra en la figura 5.

Figura 5. Simulación del primer sistema


SEGUNDO SISTEMA

Se trazó el diagrama de Nyquist del sistema descrito en la ecuación 3 como se muestra en la figura
6.
𝟏
𝑮(𝒔) = (𝟑)
𝒔 + 𝟎. 𝟐𝒔 + 𝒔 + 𝟏

Figura 6. Diagrama de Nyquist del segundo sistema

Se observaron 0 encierros al punto -1+0j.


Se obtuvo el lugar de las raíces como se muestra en la figura 7

Figura 7. Lugar de las raíces del segundo sistema


Donde se observa que el número de polos en el semiplano derecho es igual a 2 por lo que usando el
criterio de estabilidad de Nyquist el sistema es inestable dado que la función de transferencia
1+G(s)H(s) tiene dos ceros en el semiplano derecho lo que hacer que la función de transferencia a
𝐺(𝑠)
lazo cerrado 1+𝐺(𝑠)𝐻(𝑠) tenga 2 polos en el semiplano derecho lo que la hace inestable.

Se simuló el sistema a lazo cerrado para una entrada tipo escalón unitario y se observó el resultado
mostrado en la figura 8.

Figura 8. Simulación del segundo sistema


TERCER SISTEMA

Se analizó la estabilidad del tercer sistema, descrito en la ecuación 4, para ello se trazó su diagrama
de Nyquist y se buscó el número de rodeos al punto -1+0j como se muestra en la figura 9.
𝟏
𝑮(𝒔) = (𝟒)
𝒔(𝒔𝟐 + 𝒔 + 𝟎. 𝟓)

Figura 9. Diagrama de Nyquist del tercer sistema

Se puede observar que falta el tramo IV dado que Matlab no grafica infinitos, por lo que se usó un
script anexo llamado Nyqlog escrito por Trond Andressen de la Universidad Noruega para la Ciencia
y la Tecnología y se obtuvo el diagrama mostrado en la figura 10.

Figura 10. Logaritmo del diagrama de Nyquist y tramo IV del tercer sistema
Por lo que se determinó que el diagrama de Nyquist rodea 2 veces al punto -1+0j en el sentido de las
manecillas del reloj, por lo que N=2, es decir, hay 2 ceros más que polos en 1+G(s)H(s), por lo que
el sistema es inestable y ya no hace falta determinar el número de polos para poder saberlo.

Se simuló el sistema a lazo cerrado para una entrada escalón unitario tal como se muestra en la
figura 11.

Figura 11. Simulación del tercer sistema


CUARTO SISTEMA

Se analizó la estabilidad del cuarto sistema, descrito en la ecuación 5, y se comenzó por obtener su
gráfica de Nyquist tal como se muestra en la figura 12.

𝟐𝟎(𝒔 + 𝟏)
𝑮(𝒔) = (𝟓)
𝒔(𝒔 + 𝟓)(𝒔𝟐 + 𝟐𝒔 + 𝟏𝟎)

Figura 12. Diagrama de Nyquist del cuarto sistema

Dado que el tramo IV no se muestra se utilizó el ya mencionado script Nyqlog para trazar el
diagrama de Nyquist completo. En la figura 13 se puede observar el logaritmo del diagrama de
Nyquist del sistema además del tramo IV.

Figura 13. Logaritmo del diagrama de Nyquist del cuarto sistema y su tramo IV
Por lo que el número de rodeos al punto -1+0j es 0. Para poder determinar la estabilidad con el
criterio de Nyquist que se expone en la ecuación 1 es necesario trazar el lugar de las raíces como se
muestra en la figura 14 y contar el número de polos en el semiplano derecho.

Figura 14. Lugar de las raíces del cuarto sistema

El número de polos en el semiplano es igual a 0, por lo que usando el criterio de estabilidad de


Nyquist se puede decir que el sistema es estable.

En la figura 15 se muestra los resultados de la simulación del sistema a lazo cerrado para una
entrada escalón unitario.

Figura 15. Simulación del cuarto sistema


QUINTO SISTEMA

Se analizó la estabilidad del quinto sistema, descrito en la ecuación 6. Para ello se utilizó el
diagrama de Nyquist del sistema para encontrar el número de rodeos al punto -1+0j como se
muestra en la figura 16.
𝒔 + 𝟎. 𝟓
𝑮(𝒔) = (𝟔)
𝒔𝟐 +𝒔+𝟏

Figura 16. Diagrama de Nyquist del quinto sistema

Se encontraron 0 rodeos al punto -1+0j. El siguiente paso para determinar la estabilidad del sistema
fue buscar el número de polos en el semiplano derecho de la función en lazo abierto, para cumplir
dicho fin se obtuvo el lugar de las raíces del sistema como se muestra en la figura 17.

Figura 17. Lugar de las raíces del quinto sistema


Se observaron 0 polos en el semiplano derecho, por lo que según el criterio de estabilidad de
Nyquist el sistema es estable.

Se realizó una simulación del sistema a lazo cerrado con una entrada escalón unitario como se
muestra en la figura 18.

Figura 18. Simulación del quinto sistema


SEXTO SISTEMA

Para determinar la estabilidad del sexto sistema, descrito en la ecuación 7 se obtuvo su diagrama de
Nyquist como se observa en la figura 19.

𝟏𝟎𝟎(𝒔 + 𝟎. 𝟓)
𝑮(𝒔) = (𝟕)
𝒔𝟐 (𝒔+ 𝟐)(𝒔 + 𝟏𝟎)

Figura 19. Diagrama de Nyquist del sexto sistema

Se usó el script Nyqlog para poder observar el diagrama de Nyquist completo y contar el número de
rodeos al punto -1+0j. El resultado se muestra en la figura 20.

Figura 20. Logaritmo del diagrama de Nyquist del sexto sistema y su tramo IV
Se observó que hay 0 rodeos al punto -1+0j. Para poder determinar el número de ceros en el
semiplano derecho del sistema es necesario determinar el número de polos en el semiplano derecho
del sistema, por lo que se obtuvo el lugar de las raíces tal y como se muestra en la figura 21.

Figura 21. Lugar de las raíces del sexto sistema

Dado que el sistema tiene 0 polos en el semiplano derecho no tiene algún cero en el semiplano
derecho, por lo tanto es estable.

Para comprobar este resultado se realizó una simulación del sistema a lazo cerrado con una entrada
escalón unitario como se muestra en la figura 22.

Figura 22. Simulación del sexto sistema


CONCLUSIONES
Se observó que la predicción sobre la estabilidad del sistema a lazo cerrado hecha utilizando el
criterio de Nyquist acertó en todos los casos. Estas predicciones fueron hechas sobre sistemas
ideales y no sobre sistemas reales por lo que no se puede concluir que el criterio de estabilidad de
Nyquist funcione para un sistema físico.
ANEXO
Script “Nyqlog” de Trond Andresen (2009) del departamento de Ingeniería Cibernética de la
Universidad Noruega para la Ciencia y la Tecnología.
function nyqlog(sys) end
if Np_imag impoles=impoles(end+1-Np_imag:end); end
% Checking system order: % Sorting zeroes by Im-value in ascending order:
[hlp,den]=tfdata(sys,'v'); abzeroes=0;
k=1; if (numdim)
while (hlp(k) == 0) k=k+1; end zeroes=roots(num);
num=(hlp(k:end)); imzeroes=imag(zeroes);
hlp=size(size(den)); [vhlp,im_ndx]=sort(imzeroes);
if (hlp(2)> 2) zeroes(:)=zeroes(im_ndx(:));
error('Only monovariable systems allowed in abzeroes=abs(zeroes);
Nyqlog'); rezeroes=real(zeroes);
end imzeroes=imag(zeroes);
end
% Checking for delay:
dly=get(sys,'ioDelay'); % Finding smallest distance > 0 to pole or zero
% to decide
% Checking that the system is not discrete: % radius for half circles around imaginary poles;
sorz=get(sys,'variable'); eps=1e-3;
if (sorz ~= 's') R=eps;
error('Only continuous systems allowed in if Np_origin R = eps^(1/Np_origin); end
Nyqlog'); R0=inf;
end if (Np_origin && Np_imag)
R=mindist(0,poles,R0);
% Charting poles and zeroes, system dimension; if (numdim) R = mindist(0,zeroes,R0); end
% Sorting poles by Im-value in ascending order: end
sysdim=size(den); sysdim=sysdim(2)-1; R0=R;
if (sysdim == 0) if Np_imag
error('Denominator order of zero not allowed in for k=1:length(impoles)
Nyqlog'); R=mindist(impoles(k),poles,R0);
end% end
numdim=size(num); numdim = numdim(2)-1; end
if (numdim > sysdim) R0=R;
error('Denominator order must be >= nominator if (numdim)
order'); for k=1:length(impoles)
end R=mindist(impoles(k),zeroes,R0);
poles=roots(den); end
re_poles=real(poles); end
% This is used below to check stability of the frac=0.01;
closed-loop system: if Np_origin frac = (0.01)^(1/Np_origin); end
openloop_rhp_poles=sum(re_poles > 0); R=frac*R;
impoles=imag(poles);
[vhlp,im_ndx]=sort(impoles); % Calculating a tentative vector s to be used in
poles(:)=poles(im_ndx(:)); h0(s):
abpoles=abs(poles); % Ns = number of points on s. Special measures are
repoles=real(poles); % taken if there is a time delay in sys.
impoles=imag(poles); Ns=1000+150*(dly > 0);
% No. of poles in the origin and on the imaginary wmin= R;
axis, if any; wmax= 1e6*max(cat(1,abpoles,abzeroes));
Np_origin=0; if (wmax == 0) wmax= R*1e11; end
Np_imag=0; if (dly) wmax = min(wmax,4*pi/dly); end
for k=1:sysdim w=log(wmin):(log(wmax)-log(wmin))/Ns:log(wmax);
if (repoles(k) == 0) w=exp(w');
if (impoles(k) > 0) s=j.*w;
Np_imag = Np_imag+1;
elseif (impoles(k) == 0) % Splicing in possible imaginary zeroes > 0 in s:
Np_origin = Np_origin+1; n=0;
else for k=1:numdim
end if (abs(rezeroes(k)) < 1e-12 && imzeroes(k) > R)
end n=n+1;
imonlyzeroes(n) = imzeroes(k); % for xh = [0.8 0.65 0.45 0.25]
end for xh = [0.8 0.15]
end nmid=round(xh*ncount);
if (exist('imonlyzeroes')) arrow(zmain(nmid+1),zmain(nmid),'b-');
w1=cat(1,w,imonlyzeroes'); end
[w1,im_ndx]=sort(w1,1); % for xh = [0.75 0.6 0.4 0.2]
s=j.*w1; for xh = [0.7 0.1]
end nmid=round(xh*ncount);
arrow(zmirr(nmid),zmirr(nmid+1),'k-');
% Plotting main graph and its mirror image: end

s1=s; % % Contours for |N|= const. may be plotted:


spiralfactor=1.5; % % for instance [6 3 1 0.5 0.25 0 -0.5 -1 -3 -6]
spiralfactor=1/spiralfactor;
set(gcf,'Color',[1 1 1]); % nlgrid([6 3]);
s = scurve(s1,R,spiralfactor, Np_origin,
Np_imag,impoles); scalexy=axis; scalexy(3:4)= 1.01*scalexy(3:4);
%plot(s); hold on; axis(scalexy);
%break; axis equal; axis off; axis tight; hold off;
%plot([0 1],[R 1]);
s=conj(s); %******************************************
[zmirr,ncount] = nygraph(sys,s,0); %****** SUB-FUNCTIONS: ********************
hold on;
spiralfactor=1/spiralfactor; function arrow(z2,z1,col)
s = scurve(s1,R,spiralfactor, Np_origin, % dz=0.12*exp(j*angle(z2-z1));
Np_imag,impoles); dz=0.11*exp(j*angle(z2-z1));
[zmain,ncount] = nygraph(sys,s,1); z_arrow_end1=z2-dz*exp(j*pi/4);
z_arrow_end2=z2-dz*exp(-j*pi/4);
fprintf(1,'Number of poles in RHP of open-loop plot([real(z2) real(z_arrow_end1)],...
system: %i\n',openloop_rhp_poles); [imag(z2)
imag(z_arrow_end1)],col,'LineWidth',1.5);
% Count net encirclements around the point -1. plot([real(z2) real(z_arrow_end2)],...
% An encirclement is counted as positive if the [imag(z2)
direction imag(z_arrow_end2)],col,'LineWidth',1.5);
% is clockwise.
[ncirc,npoles_on_im_axis] = %***********************************************
countencirc(zmirr,zmain); function circle(zcentre,radius,plotdata)
if npoles_on_im_axis > 0 angles=0:pi/72:2*pi;
fprintf(1,'%d closed-loop pole(s) on the im- circ=zcentre+radius.*(cos(angles)+j.*sin(angles));
axis.\n',npoles_on_im_axis); plot(circ,plotdata);
fprintf(1,'Graph goes through the -1 point,
so\n'); %***********************************************
fprintf(1,'encirclement counting cannot be function phase_lines(n,rstart,rend,plotdata)
done.\n'); hold on;
else angles=0:2*pi/n:2*pi;
fprintf(1,'Number of net encirclements around lines=ones(n,2);
the -1 point: %i\n',ncirc); for k=1:n
closedloop_rhp_poles=ncirc+openloop_rhp_poles; zh = cos(angles(k))+j*sin(angles(k));
fprintf(1,'=> Number of poles in RHP of closed- lines(k,1)= rstart*zh;
loop system: %i\n',... lines(k,2)= rend*zh;
closedloop_rhp_poles);
if closedloop_rhp_poles > 0 plot(real(lines(k,:)),imag(lines(k,:)),plotdata);
fprintf(1,'=> Closed-loop-system is end
unstable\n');
else %***********************************************
fprintf(1,'and no closed-loop poles on Im-
axis\n=> Closed-loop-system is asymptotically function [s]= scurve(s1,R,spiralfactor, Np_origin,
stable\n'); Np_imag,impoles)
end a=log(spiralfactor)*2/pi;
end %R=R/spiralfactor;
% Calculating first arc if pole(s) in the origin:
% Plotting background diagram; % If there are one or more pure integrators s is
circle(0,0.5,'r-'); % made to do a small arc of a log spiral
circle(0,0.6666666667,'r-.'); % into the upper right quadrant from 0 to pi/2.
circle(0,0.833333333,'r-.'); s=s1;
circle(0,1,'r-'); if Np_origin
circle(0,1.16666667,'r-.'); fi=0:0.02/Np_origin:1; fi=0.5*pi*fi;
circle(0,1.33333333,'r-.'); sarc=R*exp((a+j)*fi);
circle(0,1.5,'r-'); % merging sarc with s:
phase_lines(24,0.5,1.5,'r-.'); x1=imag(sarc(end));
phase_lines(8,0.5,1.5,'r-'); k=1;
plot(-1,0,'ko','LineWidth',2.5); while (imag(s1(k)) < x1) k=k+1; end
plot([-1.5 1.5],[0 0]); plot([0 0],[-1.5 1.5]); s1=cat(1,sarc.',s(k:end));
text(0.03,-0.05,'-120','FontSize',7); s=s1;
text(0.4141, -0.3331,'-60','FontSize',9); end
text(0.8, -0.64,'0 dB','FontSize',8);
text(1.1924, -0.9575,'+60','FontSize',9); % Calculating arcs for possible pole(s) on the im-
axis:
% Plotting directional arrows: % For each such possible pole we generate a vector
% sarc describing a log spiral around the pole ncirc=0;
% from -pi/2 to pi/2 into the right half plane. npoles_on_im_axis=0;
fi=-1:0.02:1; fi=0.5*pi*fi; z3=zall(end);
s1=s; for k=3:length(zall)
for m = 1:Np_imag z4=z3;
R=R/spiralfactor; z1=zall(k);z2=zall(k-1); z3=zall(k-2);
sarc=R*exp((a+j)*fi); abz1=abs(z1+1);abz2=abs(z2+1); abz3=abs(z3+1);
x1=impoles(m)+imag(sarc(1)); zre1=real(z1); zre2=real(z2);
k=1; % Checking if graph is too close to -1:
while (imag(s1(k)) < x1) k=k+1; end dl1= fromline2minusone(z1,z2);
sarc(:)=sarc(:)+ j*impoles(m); dl2= fromline2minusone(z2,z3);
s1=cat(1,s1(1:k-1),sarc.'); dl3= fromline2minusone(z3,z4);
x1=impoles(m)+imag(sarc(end)); closest_now = abz1 > abz2 && abz3 > abz2;
k=1; if closest_now && min([dl1 dl2 dl3]) < 1e-5 ...
while (imag(s(k)) < x1) k=k+1; end && min([abz1 abz2 abz3])< 0.001
s1=cat(1,s1,s(k:end)); npoles_on_im_axis=npoles_on_im_axis+1;
end end
s=s1; % end checking if graph is too close to -1.

%*********************************************** % Only checking for Re axis crossings to the left


% of minus 0.9 to avoid unnecessary work:
function [zplot,ncount] = nygraph(sys,s,plotdata) if zre1 < -0.9
% Preparing logarithmic polar plot data: zim1=imag(z1); zim2=imag(z2); zim3=imag(z3);
kmax=size(s); kmax=kmax(1); if zim1*zim2 < 0
for k=1:kmax zh(k)=evalfr(sys,s(k)); end % Interpolation to find real z value at
z=zh.'; crossing:
absz = abs(z)+1e-14; delta12=(real(z1)-
logabs = 20.*log10(absz); real(z2))*abs(imag(z2))/(abs(imag(z1))+abs(imag(z2))
);
%Avoiding plot continuing for |h0| < -120dB: realcross=real(z2)+delta12;
% the vector s is then truncated. end
for k=1:kmax if zim1 > eps && zim2 < -eps
if (logabs(k) <= -120) logabs(k) = -120; end if realcross < -1
end ncirc=ncirc+1;% ncirc,z1, z2, z3
ncount=length(logabs); end
while (logabs(ncount) <= -120) ncount=ncount-1; end elseif zim1 < -eps && zim2 > eps
%From now on all vectors are ncount long; ncount <= if realcross < -1
size(s). ncirc=ncirc-1;% ncirc,z1, z2, z3
end
%Plotting the two conjugate halves of the polar elseif abs(zim2) < eps && zim1 > 0 && zim3 <
curve; 0
logabsplot=logabs(1:ncount)./120.+1; if real(z2) < -1
zplot=z(1:ncount).*logabsplot./absz(1:ncount); ncirc=ncirc+1;% ncirc,z1, z2, z3
if (plotdata) end
plot(zplot,'LineWidth',2.2); elseif abs(zim2) < eps && zim3 > 0 && zim1 <
else 0
plot(zplot,'k--','LineWidth',1.7); if real(z2) < -1
end ncirc=ncirc-1;% % ncirc,z1, z2, z3
end
% ************************ else
end
function [ncirc,npoles_on_im_axis] = end % real(z1) < -0.99
countencirc(zmirr,zmain) end

% Counts net encirclements around the point -1. % ************************


% An encirclement is counted as positive if the
direction function [dist] = mindist(point,vector,initdist)
% is clockwise. This follows Belanger (1995): % Calculates the minimum distance from a given
% "Control Engeering", Saunders College Publishing, complex number
% pp 206 - 208. % to a set of other complex numbers:
% mdist = initdist;
% Bugs fixed and improvements made in Feb. 09: kmax=length(vector);
% The function now also counts poles on the im-axis for k=1:kmax
for the d0=abs(vector(k)-point);
% closed-loop system, if any. If such poles exist, if (d0 ~= 0) mdist = min(d0, mdist); end
this end
% corresponds to the graph going through -1. dist=mdist;
% Encirclement counting is then impossible and is
% disabled. % ************************
% Another (small) bug fixed and improvements made in
June 09 function nlgrid(absNdB)
% absNdB = [6 3 1 0.5 0.25 0 -0.5 -1 -3 -6]
eps=1e-6; absNdB = absNdB';
zmirr(1:end)=zmirr(end:-1:1); n=length(absNdB);
zmirr=zmirr(2:end-1); absN=10.^(absNdB/20);
zall=[zmirr;zmain;zmirr(1)]; radii=1./absN;
if abs(imag(zall(1))) < eps nangles=200;
zall=[zall;zall(2)]; angles=0:pi/nangles:2*pi;
end angles=angles';
for k=1:n function [distline_to_minus1] =
circ=-1.+radii(k).*(cos(angles)+j.*sin(angles)); fromline2minusone(z1,z2)
absc = abs(circ)+1e-14; % Calcucates the min. distance from the point -1 to
logabs = 20.*log10(absc); the line z1,z2
for p=1:nangles v=z2-z1;
if (logabs(p) <= -120) logabs(p) = -120; end v=imag(v)-i*real(v);
end v=v/abs(z2-z1);
logabsplot=logabs./120.+1; r=z1+1;
cplot=circ.*logabsplot./absc; d=dot([real(v) imag(v)],[real(r) imag(r)]');
plot(cplot,'k-','LineWidth',0.5); distline_to_minus1=abs(d);
end % pointonline=-1-distline_to_minus1*v;

% ******************************** % ********************************
BIBLIOGRAFÍA
Levine, W., & Dorf, R. (2011). The control handbook: Control system fundamentals, second edition.
Boca Raton: CRC Press.

Ogata, K. (2010). Ingeniería de control moderna, 5ta edición. Madrid: Pearson Educación.

Das könnte Ihnen auch gefallen