findBD - initial state and system matrices B and D of a discrete-time system
job must not be specified if jobx0 = 2 and comuse = 2, or if comuse = 3.
Default: printw = 0.
findBD function for estimating the initial state and the system matrices B and D of a discrete-time system, using SLICOT routine IB01CD.
[x0,Br,V,rcnd] = findBD(1,1,1,A,C,Y,U) [x0,Br,Dr,V,rcnd] = findBD(1,1,2,A,C,Y,U) [Br,V,rcnd] = findBD(2,1,1,A,C,Y,U) [B,Dr,V,rcnd] = findBD(2,1,2,A,C,Y,U) [x0,V,rcnd] = findBD(1,2,1,A,B,C,Y,U) [x0,V,rcnd] = findBD(1,2,2,A,B,C,D,Y,U) [x0,rcnd] = findBD(2,2) // (Set x0 = 0, rcnd = 1) [x0,V,rcnd] = findBD(1,3,A,C,Y)
Note: the example lines above may contain at the end the parameters tol, printw, ldwork.
FINDBD estimates the initial state and/or the system matrices Br and Dr of a discrete-time system, given the system matrices A, C, and possibly B, D, and the input and output trajectories of the system.
The model structure is :
x(k+1) = Ax(k) + Bu(k), k >= 1, y(k) = Cx(k) + Du(k),
where x(k) is the n-dimensional state vector (at time k),
u(k) is the m-dimensional input vector,
y(k) is the l-dimensional output vector,
and A, B, C, and D are real matrices of appropriate dimensions.
//generate data from a given linear system A = [ 0.5, 0.1,-0.1, 0.2; 0.1, 0, -0.1,-0.1; -0.4,-0.6,-0.7,-0.1; 0.8, 0, -0.6,-0.6]; B = [0.8;0.1;1;-1]; C = [1 2 -1 0]; SYS=syslin(0.1,A,B,C); nsmp=100; U=prbs_a(nsmp,nsmp/5); Y=(flts(U,SYS)+0.3*rand(1,nsmp,'normal')); // Compute R S=15;L=1; [R,N,SVAL] = findR(S,Y',U'); N=3; METH=3;TOL=-1; [A,C] = findAC(S,N,L,R,METH,TOL); [X0,B,D] = findBD(1,1,2,A,C,Y',U') SYS1=syslin(1,A,B,C,D,X0); Y1=flts(U,SYS1); xbasc();plot2d((1:nsmp)',[Y',Y1'])