Documentation of ssmodx9


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


Function Synopsis

[A,B,C,D,K,X0]=ssmodx9(th,T,mod)

Help text

SSMODX9 The standard state-space model

   [A,B,C,D,K,X0] = ssmodx9(PARVAL,T,MS)

   This routine is used as the standard model-defining routine
   inside the THETA-structure for state space models if no user-
   defined structure is specified. The use of SSMODx9 should be
   transparent to the user.

   A,B etc: The discrete time state space matrices corresponding to
   the parameter values PARVAL for a linear model structure
   defined by MS (obtained from MODSTRUC or CANFORM)

Cross-Reference Information

This function calls This function is called by

Listing of function ssmodx9

function [A,B,C,D,K,X0]=ssmodx9(th,T,mod)

%   L. Ljung 10-2-90,11-25-93
%   Copyright (c) 1986-98 by The MathWorks, Inc.
%   $Revision: 2.3 $  $Date: 1997/12/02 03:40:11 $

[dum,nn]=size(mod);nyy=mod(1,nn);nx=mod(2,nn);
ny=abs(nyy);nu=(nn-nx-2*ny-2)/2;
s=1;
if nyy<0,arx=1;else arx=0;end
na=0;
if arx,
as1=mod(1:nx,1:nx);
sumas=sum4vms(as1');
nr=find(sumas==0&~isnan(sumas));
if isempty(nr),na=nx/ny;else na=(nr(1)-1)/ny;end
end
A=mod(1:nx,1:nx);
for kr=1:nx
        for kc=1:nx
        if isnan(A(kr,kc)), A(kr,kc)=th(s);s=s+1;end
        end
end
B=mod(1:nx,nx+1:nx+nu);
for kr=1:nx
        for kc=1:nu
        if isnan(B(kr,kc)),B(kr,kc)=th(s);s=s+1;end
        end
end
if na==0
C=mod(1:nx,nx+nu+1:nx+nu+ny)';
for kr=1:ny
        for kc=1:nx
        if isnan(C(kr,kc)),C(kr,kc)=th(s);s=s+1;end
        end
end
D=mod(1:ny,nx+nu+ny+1:nx+2*nu+ny);
for kr=1:ny
        for kc=1:nu
        if isnan(D(kr,kc)),D(kr,kc)=th(s);s=s+1;end
        end
end
else
C=A(1:ny,1:nx);
D=B(1:ny,:);
end
K=mod(1:nx,nx+2*nu+ny+1:nx+2*nu+2*ny);
for kr=1:nx
        for kc=1:ny
        if isnan(K(kr,kc)),K(kr,kc)=th(s);s=s+1;end
        end
end

X0=mod(1:nx,nx+2*nu+2*ny+1);
for kr=1:nx
        if isnan(X0(kr)),X0(kr)=th(s);s=s+1;end
end
if T>0 % We shall in this case sample the model with sampling interval T
s = expm([[A [B K]]*T; zeros(nu+ny,nx+nu+ny)]);
A = s(1:nx,1:nx);
B = s(1:nx,nx+1:nx+nu);
K = s(1:nx,nx+nu+1:nx+nu+ny);
end