Man Scilab

findBD
Scilab Function

findBD - initial state and system matrices B and D of a discrete-time system

Calling Sequence

[(x0) (,B (,D)) (,V) (,rcnd)] = findBD(jobx0,comuse (,job),A (,B),C (,D),Y
(,U,tol,printw,ldwork))

Parameters

Description

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.

Comments

  • 1. The n-by-m system input matrix B is an input parameter when jobx0 = 1 and comuse = 2, and it is an output parameter when comuse = 1.
  • 2. The l-by-m system matrix D is an input parameter when jobx0 = 1, comuse = 2 and job = 2, and it is an output parameter when comuse = 1 and job = 2.
  • 3. The n-vector of estimated initial state x(0) is an output parameter when jobx0 = 1, but also when jobx0 = 2 and comuse <= 2, in which case it is set to 0.
  • 4. If ldwork is specified, but it is less than the minimum workspace size needed, that minimum value is used instead.
  • Examples

    
    //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'])
     
      

    See Also

    inistate ,   findx0BD ,   findABCD ,   findAC ,   findBD ,  

    Author

    V. Sima, Katholieke Univ. Leuven, Belgium, May 2000. (Revisions: V. Sima, July 2000)

    Back