slicot_ab01od
Staircase form for multi-input systems using orthogonal state and input transformations.
📝Syntax
[A_OUT, B_OUT, U_OUT, V, NCONT_OUT, INDCON_OUT, KSTAIR_OUT, INFO] = slicot_ab01od(STAGES, JOBU, JOBV, A_IN, B_IN, U_IN, NCONT_IN, INDCON_IN, KSTAIR_IN, TOL)
📥Input Arguments
Parameter Description
STAGES Specifies the reduction stage: 'F': Perform the forward stage only; 'B': Perform the backward stage only; 'A': Perform both (all) stages.
JOBU Indicates whether the user wishes to accumulate in a matrix U the state-space transformations: 'N': Do not form U; 'I': U is internally initialized to the unit matrix
JOBV Indicates whether the user wishes to accumulate in a matrix V the input-space transformations: 'N': Do not form V; I': V is initialized to the unit matrix and the orthogonal transformation matrix V is returned.
A_IN the leading N-by-N part of this array must contain the state transition matrix A to be transformed
B_IN the leading N-by-M part of this array must contain the input matrix B to be transformed.
U_IN If STAGES ~= 'B' or JOBU = 'N', then U need not be set on entry. If STAGES = 'B' and JOBU = 'I', then, on entry, the leading N-by-N part of this array must contain the transformation matrix U that reduced the pair to the orthogonal canonical form.
NCONT_IN The order of the controllable state-space representation. NCONT_IN is input only if STAGES = 'B'.
INDCON_IN The number of stairs in the staircase form (also, the controllability index of the controllable part of the system representation).
TOL The tolerance to be used in rank determination when transforming (A, B).
📤Output Arguments
Parameter Description
A_OUT On exit, the leading N-by-N part of this array contains the transformed state transition matrix U' * A * U. The leading NCONT-by-NCONT part contains the upper block Hessenberg state matrix Acont in Ac, given by U' * A * U, of a controllable realization for the original system. The elements below the first block-subdiagonal are set to zero. If STAGES ~='F', the subdiagonal blocks of A are triangularized by RQ factorization, and the annihilated elements are explicitly zeroed.
B_OUT On exit with STAGES = 'F', the leading N-by-M part of this array contains the transformed input matrix U' * B, with all elements but the first block set to zero. On exit with STAGES ~= 'F', the leading N-by-M part of this array contains the transformed input matrix U' * B * V, with all elements but the first block set to zero and the first block in upper triangular form.
U_OUT if JOBU = 'I', the leading N-by-N part of this array contains the transformation matrix U that performed the specified reduction. If JOBU = 'N', the array U is not referenced and can be supplied as a dummy array.
V If JOBV = 'I', then the leading M-by-M part of this array contains the transformation matrix V.
NCONT_OUT NCONT_OUT is input only if STAGES = 'B'.
INDCON_OUT INDCON is input only if STAGES = 'B'.
KSTAIR_OUT KSTAIR is input if STAGES = 'B', and output otherwise.
INFO 0: successful exit; if INFO = -i, the i-th argument had an illegal value.
📄Description

To reduce the matrices A and B using (and optionally accumulating) state-space and input-space transformations U and V respectively, such that the pair of matrices

Ac = U' * A * U, Bc = U' * B * V

💡Examples
N = 5;
M = 2;
TOL = 0.
STAGES = 'F';
JOBU = 'N';
JOBV = 'N';
A_IN = [17.0   24.0    1.0    8.0   15.0;
   23.0    5.0    7.0   14.0   16.0;
   4.0    6.0   13.0   20.0   22.0;
   10.0   12.0   19.0   21.0    3.0;
   11.0   18.0   25.0    2.0    9.0];

% SLICOT 5.0 have an error in the example.
A_IN = A_IN.';

B_IN = [   -1.0   -4.0;
    4.0    9.0;
   -9.0  -16.0;
   16.0   25.0;
  -25.0  -36.0];

U_IN = zeros(N, N);
INDCON_IN = N;
NCONT_IN = 1;
KSTAIR_IN = zeros(1,N);
[A_OUT, B_OUT, U_OUT, V, NCONT_OUT, INDCON_OUT, KSTAIR_OUT, INFO] = slicot_ab01od(STAGES, JOBU, JOBV, A_IN, B_IN, U_IN, NCONT_IN, INDCON_IN, KSTAIR_IN, TOL)
Used Functions
AB01OD
📚Bibliography
http://slicot.org/objects/software/shared/doc/AB01OD.html
🕔Version History
Version Description
1.0.0 initial version
Edit this page on GitHub