Documentation of arx2th


Global Index (short | long) | Local contents | Local Index (short | long)


Function Synopsis

eta=arx2th(A,B,ny,nu,lam,Tsamp)

Help text

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.

Cross-Reference Information

This function calls This function is called by

Listing of function arx2th

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;