Global Index (short | long) | Local contents | Local Index (short | long)
th=poly2th(a,b,c,d,f,LAM,T,inhib)
POLY2TH Constructs a "theta-matrix" from given polynomials. TH = POLY2TH(A,B,C,D,F,LAM,T) TH: returned as a matrix of the standard format, describing the model A(q) y(t) = [B(q)/F(q)] u(t-nk) + [C(q)/D(q)] e(t) The exact format is given as in (see also) THETA. A,B,C,D and F are entered as the polynomials. A,C,D and F start with 1 , while B contains leading zeros to indicate the delay(s) for discr. time models. For multi-input systems B and F are matrices with the number of rows equal to the number of inputs. For a time series, B and F are entered as []. POLY2TH is thus the inverse of (see also) TH2POLY. LAM is the variance of the noise term e, and T is the sampling interval A negative value of T indicates a time-continuous model. Then the poly- nomials are entered in descending powers of s. Example: A=1,B=[1 2;0 3] C=1;D=1;F=[1 0;0 1]; T=-1 corresponds to the time-continuous system Y = (s+2)/s U1 + 3 U2. Trailing C,D,F, LAM, and T can be omitted, in which case they are taken as 1's (if B=[], then F=[]). See also IDINPUT, IDSIM, TH2POLY.
This function calls | This function is called by |
---|---|
function th=poly2th(a,b,c,d,f,LAM,T,inhib) % L. Ljung 10-1-86 % Revised 4-21-91,9-9-94 % Copyright (c) 1986-98 by The MathWorks, Inc. % $Revision: 2.3 $ $Date: 1997/12/02 03:39:57 $ if nargin<2, disp('Usage: TH = POLY2TH(A,B)') disp(' TH = POLY2TH(A,B,C,D,F,LAM,T)') return end [nu,nb1]=size(b); nu=nu(1); if nargin<8,inhib=0;end if nargin<7, T=[];end if nargin<6, LAM=[];end if nargin<5, f=[];end if nargin<4, d=[];end if nargin<3, c=[];end if isempty(a), a=1;end if isempty(c),c=1;end if isempty(d),d=1;end if isempty(f)&~isempty(b),f=ones(nu,1);end if isempty(T),T=1;end if isempty(LAM),LAM=1;end [nu1,dum]=size(f); if nu1~=nu, error('The B- and the F-polynomials should have the same number of rows.'),end if a(1)~=1, error('The A-polynomial should be monic (start with "1").'),end if c(1)~=1, error('The C-polynomial should be monic (start with "1").'),end if d(1)~=1, error('The D-polynomial should be monic (start with "1").'),end if T>0,for ku=1:nu,if f(ku,1)~=1 error('Each of the F-polynomials should be monic (start with "1") for discrete time models.') end,end,end na=length(a)-1;nc=length(c)-1;nd=length(d)-1; if nu>0,ib=b~=0; if nb1>1,nk=sum(cumsum(ib')==0);else nk=(cumsum(ib')==0);end if T>0, ib=(b(:,nb1:-1:1)~=0); if nb1>1,nb=-sum(cumsum(ib')==0)-nk+nb1;else nb=-(cumsum(ib')==0)-nk+nb1;end nb=max(nb,zeros(1,nu)); else nb=nb1-nk;end,end if nu==0, nb=0;nk=0;end [nuf,nf1]=size(f); if nuf~=nu, error('F and B must have the same number of rows.'),return,end if nf1==1 | nf1==0 nf=zeros(1,nu); else if T>0 ih=(f(:,nf1:-1:1)~=0); nf=-sum(cumsum(ih')==0)+nf1-1; else ih=f~=0; for ku=1:nu nf(ku)=nf1-min(find(ih(ku,:)~=0)); if f(ku,nf1-nf(ku))~=1 error('For continuous time systems the first non zero element of the rows of f must be a "1", corresponding to a monic F-polynomial.') end end end end n=na+sum(nb)+nc+nd+sum(nf); th=zeros(3,max([7 6+3*nu n])); if nu>0 th(1,1:6+3*nu)=[LAM T nu na nb nc nd nf nk]; else th(1,1:6)=[LAM T nu na nc nd]; end if na>0, th(3,1:na)=a(2:na+1);end if nc>0, th(3,na+sum(nb)+1:na+nc+sum(nb))=c(2:nc+1);end if nd>0, th(3,na+nc+1+sum(nb):na+nc+nd+sum(nb))=d(2:nd+1);end sb=na;sf=na+sum(nb)+nc+nd; for k=1:nu if nb(k)>0,th(3,sb+1:sb+nb(k))=b(k,nk(k)+1:nk(k)+nb(k));end if nf(k)>0, if T>0,th(3,sf+1:sf+nf(k))=f(k,2:nf(k)+1); else th(3,sf+1:sf+nf(k))=f(k,nf1-nf(k)+1:nf1); end end sb=sb+nb(k); sf=sf+nf(k); end ti=fix(clock); ti(1)=ti(1)/100; th(2,2:6)=ti(1:5); th(2,7)=6; if T<0 & length(c)>length(conv(d,a)) &~inhib, disp(str2mat('This model has differentiated white measurement noise.',... ' Expect problems.')) end if T<0 & length(c)<length(conv(d,a)) &~inhib, disp(str2mat(... 'This model has no white component in the measurement noise.',... 'Expect problems with sampling and state-space representations.')) end