⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 anasolv.m

📁 Introduction to the Companion MATLAB Codes
💻 M
字号:
function [S,Rts,K]=anasolv(G,cc,dd,x0)
G=ss(G); [Ga,xa]=augment(G,cc,dd,x0);
vec=ones(1,length(Ga.a));
[Aj,T,K,Rts]=jordan_m(Ga.a,vec); 
B=inv(T)*xa;  F=[]; G0=[]; j=1; 
for i=1:length(K), 
   if (imag(Rts(j))>1e-5), 
      F1=[B(j),B(j+1); B(j+1),-B(j)]; 
      G1=diag([1,1]); j=j+2;
   else
      Xx=B(j:j+K(i)-1)'; 
      F1=Xx; G2=1;
      for k=2:K(i)
         G2(k)=G2(k-1)/(k-1);
         Xx=[Xx(2:K(i)), 0];
         F1=[F1; Xx];
      end
      G1=diag(G2); j=j+K(i); 
   end
   mm=size(F1); nn=length(F); 
   F=[F,zeros(nn,mm(2)); zeros(mm(1),nn),F1];
   G0=[G0, zeros(nn,mm(2)); 
      zeros(mm(1),nn), G1];
end
S=T*F*G0;

%jordan_m function is the supporting function for 
%anasolv().  If performs Jordan realization to
%the original system model.
function [AJord,T,JJ,Rts]=jordan_m(A,V0,Eps)
if nargin==2, Eps=1e-5; end
Rts=eig(A); Rts=sort(Rts);
Rts=Rts(length(Rts):-1:1); V=[]; 
Ndim=length(Rts); M=V0;
for i=2:Ndim, M=[M; M(i-1,:)*A]; end
k = 0; JJ = [];
while k < Ndim,
   k=k+1; K=0; key=1; 
   Rts0=Rts(k); Rts1=Rts(k);
   if (abs(imag(Rts0))>Eps), 
      key=2; K=K+1; k=k+2;
   else
      while (k<=Ndim & abs(Rts0-Rts1)<1e-5),
        k=k+1; K=K+1; key=0;
        if k<=Ndim, Rts1=Rts(k); end   
   end, end
   if key~=1, JJ=[JJ K]; k=k-1; end
end
V=[]; K=0;
for i=1:length(JJ),  
   V0=[]; Rts0=Rts(K+1);
   if (abs(imag(Rts0))<eps),  
      K=K+JJ(i);
      for j=1:Ndim,
         V0=[V0; real(Rts0)^(j-1)];
      end
      if JJ(i)>1,
         V1=V0; 
         for k=2:JJ(i), 
            V2=zeros(Ndim,1);
            for j=k:Ndim
               V2(j)=V1(j-1)*(j-1)/(k-1);
            end
            V0=[V0 V2]; V1=V2;
      end, end
   else, K=K+2;
      for j=1:Ndim,
         V0=[V0; 
           real(Rts0^(j-1)) imag(Rts0^(j-1))];
   end, end
   V=[V V0];
end
T=inv(M)*V; AJord=inv(T)*A*T;
for i=1:Ndim, for j=1:Ndim
   if abs(AJord(i,j))<Eps, AJord(i,j)=0; end
end, end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -