Global Index (short | long) | Local contents | Local Index (short | long)
eta=arx2th(A,B,ny,nu,lam,Tsamp)
ARX2TH Constructs the THETA-format for an ARX model. TH=ARX2TH(A,B,ny,nu) A,B: The given matrix polynomials for a (possibly) multivariable ARX-model y(t) + A1 y(t-1) + .. + An y(t-n) = = B0 u(t) + ..+ B1 u(t-1) + .. Bm u(t-m) A = [I A1 A2 .. An], B=[B0 B1 .. Bm] ny, nu : The number of outputs and inputs, respectively TH is returned as a model structure (in the THETA-format) where free parameters are consistent with the structure of A and B, i.e. leading zeros in the rows of B are regarded as fixed delays, and trailing zeros in the rows of A and B are regarded as a definition of lower order polynomials. These zeros will thus be regarded as fixed while all other parameters are free. The nominal values of these free parameters are set equal to the values in A and B. With th = ARX2TH(A,B,ny,nu,LAMBDA,Tsamp) also the innovations covarian- ce matrix LAMBDA and the sampling interval Tsamp can be specified. See also ARX, THETA and TH2ARX.
This function calls | This function is called by |
---|---|
function eta=arx2th(A,B,ny,nu,lam,Tsamp) % L. Ljung 10-2-90,11-2-91 % Copyright (c) 1986-98 by The MathWorks, Inc. % $Revision: 2.3 $ $Date: 1997/12/02 03:43:30 $ if nargin < 4 disp('Usage: TH = ARX2TH(A,B,NY,NU)') disp(' TH = ARX2TH(A,B,NY,NU,LAM,T)') return end if nargin<6, Tsamp=[];end, if nargin<5, lam=[];end if isempty(Tsamp),Tsamp=1;end, if isempty(lam),lam=eye(ny);end [ra,ca]=size(A);if isempty(B),rb=ra;nu=0;else [rb,cb]=size(B);end na=(ca-ny)/ny; if nu>0,nb=(cb-nu)/nu;else nb=0;end if ra~=ny | rb~=ny, error('The A and the B polynomials must have the same number of rows as the number of outputs!'),end if floor(na)~=na | floor(nb)~=nb,error('The size of A or B is not consistent with an ARX-model! The number of columns must be a multiple of the number of rows'),end for outp=1:ny for kk=1:ny sl=A(outp,ny+kk:ny:na*ny+ny); sl=(sl~=0);sl=sl(length(sl):-1:1); sl=cumsum(sl);ksl=max(find(sl==0));if length(ksl)==0,ksl=0;end nna(outp,kk)=na-ksl; end for kk=1:nu sl=B(outp,kk:nu:nb*nu+nu); sl1=(sl~=0);ksl=max(find(cumsum(sl1)==0)); if length(ksl)==0,ksl=0;end nnk(outp,kk)=ksl; sl1=sl1(length(sl1):-1:1);sl=cumsum(sl1); ksl=max(find(sl==0));if length(ksl)==0,ksl=0;end if ksl==nb+1,nnb(outp,kk)=0;nnk(outp,kk)=0;else nnb(outp,kk)=nb-ksl-nnk(outp,kk)+1;end end end nn=[nna nnb nnk]; nd=sum(sum(nna)')+sum(sum(nnb)'); eta0=mketaarx(nn,ones(1,nd)); [A1,B1]=th2arx(eta0);[ra,ca]=size(A1);[rb,cb]=size(B1); A1=A1(:,ny+1:ca); Am=A(:,ny+1:ca); B2=B1(:,nu+1:cb);Bm=B(:,nu+1:cb); C=[A1 B2]; par=[]; for kk=1:ny if ~isempty(Am),filla=-Am(kk,find(A1(kk,:)==-1));else filla=[];end if ~isempty(Bm),fillb=Bm(kk,find(B2(kk,:)==1));else fillb=[];end par=[par filla fillb]; end for kk=1:ny if nu>0,par=[par B(kk,find(B1(kk,1:nu)==1))];end end eta=mketaarx(nn,par,lam,Tsamp); eta(2,7)=32;