Global Index (short | long) | Local contents | Local Index (short | long)
[zepo,Kg]=zp(th,ku,ky,thresh)
ZP Computes zeros, poles and static gains associated with a model [ZEPO,K] = zp(TH) For a model defined by TH (in the format described by HELP THETA) ZEPO is returned as the zeros and poles and K as the static gains of the model. The first rows in these matrices contain integers with information about the column in question. For the zeros and the gains this integer is simply the input number, while for the poles it is 20 + the input number. The noise source e is in this context counted as input number 0. For multi-output models, 1000*(output # - 1) is added to these numbers. With [ZEPO,K] = zp(TH,KU,KY) the zeros and poles associated with the input and output numbers given by the entries of the row vectors KU and KY, respectively, are computed. Default values: KU=[1:number of inputs], KY=[1:number of outputs]. Noise input from source ke is counted as input # -ke. Input number 0 means all noise sources. The zeros and poles can be plotted by ZPPLOT. zpplot(zp(TH)) is a possible construction. See also th2zp.
| This function calls | This function is called by |
|---|---|
function [zepo,Kg]=zp(th,ku,ky,thresh)
% L. Ljung 10-1-86, revised 7-3-87,1-16-94.
% Copyright (c) 1986-98 by The MathWorks, Inc.
% $Revision: 2.3 $ $Date: 1997/12/02 03:42:17 $
% *** Set up default values ***
if nargin<4, thresh=[];end
if nargin<3, ky=[];end
if nargin<2, ku=[];end
if isempty(thresh),thresh=100000;end
if isthss(th)
pars=th2par(th);
if any(abs(imag(pars))>eps),cplx=1;else cplx=0;end
if exist('ss2zp')&~cplx
eval('[zepo,Kg]=zpss(th,ku,ky,thresh);')
else
eval('[zepo,Kg]=zpssnosp(th,ku,ky,thresh);')
end
return
end
nu=th(1,3);
if nu==0,kudef=0;else kudef=1:nu;end
if isempty(ku), ku=kudef;end
if any(ku==-1), ku(find(ku==-1))=0;end
if max(ku)>nu | min(ku)<0, error('Input indices outside # of inputs in theta')
return,end
[a,b,c,d,f]=polyform(th);
if length(find(ku==0))>0
b(nu+1,1:length(c))=c;
f(nu+1,1:length(d))=d;
end
[n1,nb]=size(b); [n1,nf]=size(f);
nzp=max(nb-1,nf+length(a)-2);
zepo=zeros(nzp+1,2*length(ku))+inf;
cc=1;
for k=ku
if k<=0,k1=501;k=nu+1;else k1=k;end
zepo(1,cc:cc+1)=[k1 20+k1];Kg(1,(cc+1)/2)=k1;
dg=conv(a,f(k,:));
zb=roots(b(k,:)); nzb=length(zb);
kind=find(abs(zb)>thresh);
if ~isempty(kind),zb(kind)=inf*ones(length(kind),1);end
if nzb>0, zepo(2:nzb+1,cc)=zb;end
zg=roots(dg); nzg=length(zg);
if nzg>0, zepo(2:nzg+1,cc+1)=zg;end
[tmp1,tmp2]=size(b(k,:));
[md,nd] = size(dg);
Kg(2,(cc+1)/2)=(b(k,:)*ones(tmp1,tmp2)')/(dg*ones(md,nd)');
cc=cc+2;
end
zepo(1,:)=sign(gett(th))*zepo(1,:);