Global Index (short | long) | Local contents | Local Index (short | long)
[yhat,thpred]=predict(z,theta,m)
PREDICT Computes the m-step ahead prediction.
YP = PREDICT(Z,TH,M)
Z : The output - input data for which the prediction is computed.
Z = [Y U], where Y and U are column vectors (one column for each
output and input)
TH: The model in the THETA format (see also THETA).
M : The prediction horizon. Old outputs up to time t-M are used to
predict the output at time t. All relevant inputs are used.
M = inf gives a pure simulation of the system.(Default M=1).
YP: The resulting predicted output.
With [YP,THPRED] = PREDICT(Z,TH,M) the predictor is returned in the
THETA format
See also COMPARE and IDSIM.
| This function calls | This function is called by |
|---|---|
function [yhat,thpred]=predict(z,theta,m)
% L. Ljung 10-1-89,9-9-94
% Copyright (c) 1986-98 by The MathWorks, Inc.
% $Revision: 2.4 $ $Date: 1997/12/02 03:42:31 $
if nargin<2
disp('Usage: YP = PREDICT(Z,TH)')
disp(' YP = PREDICT(Z,TH,M)')
return
end
if nargin<3, m=1;end
if isempty(m), m=1;end
if ~isinf(m),if m<1|m~=floor(m)
error('The prediction horizon M must by a positive integer.')
end,end
nu=theta(1,3);[Ncap,nz]=size(z);
if isinf(m),
if nu==0,
error(['You cannot use infinite prediction horizon for time series.'])
else
eval('yhat=idsim(z(:,nz-nu+1:nz),theta);');
end
return
end
if isthss(theta),
eval('yhat=predicts(z,theta,m);')
if nargout==2
disp(['The predictor will not be returned for a theta-model',...
' that is defined via a state-space model.'])
end
return
end
[a,b,c,d,f]=th2poly(theta);
T=gett(theta);
if T<0
error(['This is a continuous time model of input-output type.',...
' Please sample it (using thc2thd) before applying predict.'])
end
if nu>0
ff=1;
for ku=1:nu,
bt=b(ku,:);
for kku=1:nu,if kku~=ku,bt=conv(bt,f(kku,:));end,end
bb(ku,:)=bt;
ff=conv(ff,f(ku,:));
end
a=conv(conv(a,ff),d);c=conv(c,ff);
else
a=conv(a,d);
end
na=length(a);nc=length(c);nn=max(na,nc);
a=[a,zeros(1,nn-na)];c=[c,zeros(1,nn-nc)];
[f,g]=deconv(conv([1 zeros(1,m-1)],c),a);
ng=length(g);
if nu>0,
df=conv(d,f);
for ku=1:nu
bf(ku,:)=conv(bb(ku,:),df);
end
nbf=length(bf(1,:));nn=max(ng,nbf);
gg=[[g,zeros(1,nn-ng)];[bf,zeros(nu,nn-nbf)]];
else
gg=g;
end
thpred=poly2th(c,gg);
yhat=idsim(z,thpred);