Code covered by the BSD License  

Highlights from
MIMOtool

image thumbnail

MIMOtool

by

 

12 Nov 2001 (Updated )

Multi Input Multi Output Systems Toolbox

polesplot.m
function polesplot(indice,tipo)
%POLES PLOT : grafico a barre e grafico 3D dei gramiani per ogni polo 
%
%          polesplot(indice,tipo)
%
% indice = intero che indica il numero d'ordine del polo considerato
% tipo   = intero che indica il tipo di grafico da plottare :
%          0 ---> grafico a barre del valore assoluto dell'autovettore 
%                 del polo rispetto agli stati
%          1 ---> grafico 3D dei gramiani di tutti i poli e del polo
%                 considerato
%
%
% Massimo Davini 15/05/99 --- revised 30/05/99

% put delgraf instead of delete(findobj('tag','grafico'));
% 25/may/02 Giampy

global stack;

A=stack.general.A; B=stack.general.B;
C=stack.general.C; D=stack.general.D;

Gc=gram3(A,B);              %grahamiano di controllabilit
Go=gram3(A',C');            %grahamiano di osservabilit
[Uc,Sc,Vc]=svd(Gc);
[Uo,So,Vo]=svd(Go);

Di=pinv(D);
Ai=A-B*Di*C;
Bi=-B*Di;
Ci=Di*C;

[E,L]=eig(A);
cv=1./abs(sqrt(diag(pinv(E'*Uc*Sc*Uc'*E))));
ov=1./abs(sqrt(diag(pinv(E'*Uo*So*Uo'*E))));
l=diag(L);
[v0,id]=sort(real(l));

callbff=sprintf('polesplot(%u,%u);',indice+1,tipo);
callbrw=sprintf('polesplot(%u,%u);',indice-1,tipo);

if indice==length(E) set(findobj('tag','avanti'),'enable','off');
else  set(findobj('tag','avanti'),'enable','on','callback',callbff);
end;

if indice==1 set(findobj('tag','indietro'),'enable','off');
else  set(findobj('tag','indietro'),'enable','on','callback',callbrw);
end;


Ln=l(id(indice));
cn=cv(id(indice));
on=ov(id(indice));
En=E(:,id(indice));

delgraf;

if tipo==0
  set(gca,'Position',[0.1 0.3 0.8 0.6]);
  bar(abs(En));
  xlabel('States','fontsize',9);ylabel('abs( eigenvector )','fontsize',9);
  set(gca,'tag','grafico');
  title(sprintf('                POLE : %s   Ctrb : %s   Obsv : %s',num2str(Ln),num2str(cn),num2str(on)),...
      'color','y','fontsize',9,'fontweight','demi');
   set(findobj('tag','gramiani'),'string','CTRB-OBSV',...
      'callback',sprintf('polesplot(%u,1);',indice));
end;

if tipo==1
 set(gca,'Position',[0.08 0.3 0.85 0.6]);    
 plot3(real(l),imag(l),log10(cv),'r*','MarkerSize',5);
 xlabel('real axis','fontsize',9);ylabel('imag axis','fontsize',9);
 set(gca,'tag','grafico');
 title(sprintf('                  Ctrb (red) , Obsv (blue) , Pole = %s',num2str(l(id(indice)))),...
  'color','y','fontsize',9,'fontweight','demi');
 hold on
 plot3(real(l),imag(l),log10(ov),'b*','MarkerSize',5);
 grid;
 plot3(real(l(id(indice))),imag(l(id(indice))),log10(ov(id(indice))),'ko','MarkerSize',8);
 plot3(real(l(id(indice))),imag(l(id(indice))),log10(cv(id(indice))),'ko','MarkerSize',8);
 hold off
 set(findobj('tag','gramiani'),'string','POLE',...
    'callback',sprintf('polesplot(%u,0);',indice));
end;

  crea_pop(0,'crea');

Contact us