Purpose
To construct the minimum norm feedback matrix F to perform "deadbeat control" on a (A,B)-pair of a state-space model (which must be preliminarily reduced to upper "staircase" form using SLICOT Library routine AB01OD) such that the matrix R = A + BFU' is nilpotent. (The transformation matrix U reduces R to upper Schur form with zero blocks on its diagonal (of dimension KSTAIR(i)) and therefore contains bases for the i-th controllable subspaces, where i = 1,...,KMAX).Specification
SUBROUTINE SB06ND( N, M, KMAX, A, LDA, B, LDB, KSTAIR, U, LDU, F,
$ LDF, DWORK, INFO )
C .. Scalar Arguments ..
INTEGER INFO, KMAX, LDA, LDB, LDF, LDU, M, N
C .. Array Arguments ..
INTEGER KSTAIR(*)
DOUBLE PRECISION A(LDA,*), B(LDB,*), DWORK(*), F(LDF,*), U(LDU,*)
Arguments
Input/Output Parameters
N (input) INTEGER
The actual state dimension, i.e. the order of the
matrix A. N >= 0.
M (input) INTEGER
The actual input dimension. M >= 0.
KMAX (input) INTEGER
The number of "stairs" in the staircase form as produced
by SLICOT Library routine AB01OD. 0 <= KMAX <= N.
A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
On entry, the leading N-by-N part of this array must
contain the transformed state-space matrix of the
(A,B)-pair with triangular stairs, as produced by SLICOT
Library routine AB01OD (with option STAGES = 'A').
On exit, the leading N-by-N part of this array contains
the matrix U'AU + U'BF.
LDA INTEGER
The leading dimension of array A. LDA >= MAX(1,N).
B (input/output) DOUBLE PRECISION array, dimension (LDB,M)
On entry, the leading N-by-M part of this array must
contain the transformed triangular input matrix of the
(A,B)-pair as produced by SLICOT Library routine AB01OD
(with option STAGES = 'A').
On exit, the leading N-by-M part of this array contains
the matrix U'B.
LDB INTEGER
The leading dimension of array B. LDB >= MAX(1,N).
KSTAIR (input) INTEGER array, dimension (KMAX)
The leading KMAX elements of this array must contain the
dimensions of each "stair" as produced by SLICOT Library
routine AB01OD.
U (input/output) DOUBLE PRECISION array, dimension (LDU,N)
On entry, the leading N-by-N part of this array must
contain either a transformation matrix (e.g. from a
previous call to other SLICOT routine) or be initialised
as the identity matrix.
On exit, the leading N-by-N part of this array contains
the product of the input matrix U and the state-space
transformation matrix which reduces A + BFU' to real
Schur form.
LDU INTEGER
The leading dimension of array U. LDU >= MAX(1,N).
F (output) DOUBLE PRECISION array, dimension (LDF,N)
The leading M-by-N part of this array contains the
deadbeat feedback matrix F.
LDF INTEGER
The leading dimension of array F. LDF >= MAX(1,M).
Workspace
DWORK DOUBLE PRECISION array, dimension (2*N)Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value.
Method
Starting from the (A,B)-pair in "staircase form" with "triangular"
stairs, dimensions KSTAIR(i+1) x KSTAIR(i), (described by the
vector KSTAIR):
| B | A * . . . * |
| 1| 11 . . |
| | A A . . |
| | 21 22 . . |
| | . . . |
[ B | A ] = | | . . * |
| | . . |
| 0 | 0 |
| | A A |
| | r,r-1 rr |
where the i-th diagonal block of A has dimension KSTAIR(i), for
i = 1,2,...,r, the feedback matrix F is constructed recursively in
r steps (where the number of "stairs" r is given by KMAX). In each
step a unitary state-space transformation U and a part of F are
updated in order to achieve the final form:
| 0 A * . . . * |
| 12 . . |
| . . |
| 0 A . . |
| 23 . . |
| . . |
[ U'AU + U'BF ] = | . . * | .
| . . |
| |
| A |
| r-1,r|
| |
| 0 |
References
[1] Van Dooren, P.
Deadbeat control: a special inverse eigenvalue problem.
BIT, 24, pp. 681-699, 1984.
Numerical Aspects
The algorithm requires O((N + M) * N**2) operations and is mixed numerical stable (see [1]).Further Comments
NoneExample
Program Text
* SB06ND EXAMPLE PROGRAM TEXT
*
* .. Parameters ..
INTEGER NIN, NOUT
PARAMETER ( NIN = 5, NOUT = 6 )
INTEGER NMAX, MMAX
PARAMETER ( NMAX = 20, MMAX = 20 )
INTEGER LDA, LDB, LDU, LDV, LDF
PARAMETER ( LDA = NMAX, LDB = NMAX, LDU = NMAX,
$ LDV = MMAX, LDF = MMAX )
INTEGER LIWORK
PARAMETER ( LIWORK = MMAX )
INTEGER LDWORK
PARAMETER ( LDWORK = NMAX + MAX(NMAX,3*MMAX) )
* PARAMETER ( LDWORK = 4*NMAX)
DOUBLE PRECISION ZERO, ONE
PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 )
* .. Local Scalars ..
DOUBLE PRECISION TOL
INTEGER I, INFO, J, KMAX, M, N, NCONT
CHARACTER*1 JOBU, JOBV
* .. Local Arrays ..
DOUBLE PRECISION A(LDA,NMAX), B(LDB,MMAX), DWORK(LDWORK),
$ F(LDF,NMAX), U(LDU,NMAX), V(LDV,MMAX)
INTEGER IWORK(LIWORK), KSTAIR(NMAX)
C .. External Functions ..
LOGICAL LSAME
EXTERNAL LSAME
* .. External Subroutines ..
EXTERNAL AB01OD, DLASET, SB06ND
* .. Intrinsic Functions ..
INTRINSIC MAX
* .. Executable Statements ..
*
WRITE ( NOUT, FMT = 99999 )
* Skip the heading in the data file and read the data.
READ ( NIN, FMT = '()' )
READ ( NIN, FMT = * ) N, M, TOL, JOBU, JOBV
IF ( N.LT.0 .OR. N.GT.NMAX ) THEN
WRITE ( NOUT, FMT = 99994 ) N
ELSE
READ ( NIN, FMT = * ) ( ( A(I,J), I = 1,N ), J = 1,N )
IF ( M.LT.0 .OR. M.GT.MMAX ) THEN
WRITE ( NOUT, FMT = 99993 ) M
ELSE
READ ( NIN, FMT = * ) ( ( B(I,J), J = 1,M ), I = 1,N )
* First put (A,B) into staircase form with triangular pivots
* and determine the stairsizes.
CALL AB01OD( 'A', JOBU, JOBV, N, M, A, LDA, B, LDB, U,
$ LDU, V, LDV, NCONT, KMAX, KSTAIR, TOL, IWORK,
$ DWORK, LDWORK, INFO )
*
IF ( INFO.EQ.0 ) THEN
IF( LSAME( JOBU, 'N' ) ) THEN
* Initialize U as the identity matrix.
CALL DLASET( 'Full', N, N, ZERO, ONE, U, LDU )
END IF
* Perform "deadbeat control" to give F.
CALL SB06ND( N, M, KMAX, A, LDA, B, LDB, KSTAIR, U, LDU,
$ F, LDF, DWORK, INFO )
*
IF ( INFO.NE.0 ) THEN
WRITE ( NOUT, FMT = 99997 ) INFO
ELSE
WRITE ( NOUT, FMT = 99996 )
DO 60 I = 1, M
WRITE ( NOUT, FMT = 99995 ) ( F(I,J), J = 1,N )
60 CONTINUE
END IF
ELSE
WRITE ( NOUT, FMT = 99998 ) INFO
END IF
END IF
END IF
STOP
*
99999 FORMAT (' SB06ND EXAMPLE PROGRAM RESULTS',/1X)
99998 FORMAT (' INFO on exit from AB01OD = ',I2)
99997 FORMAT (' INFO on exit from SB06ND = ',I2)
99996 FORMAT (' The deadbeat feedback matrix F is ')
99995 FORMAT (20(1X,F8.4))
99994 FORMAT (/' N is out of range.',/' N = ',I5)
99993 FORMAT (/' M is out of range.',/' M = ',I5)
END
Program Data
SB06ND EXAMPLE PROGRAM DATA 5 2 0.0 N N -17.0 24.0 41.0 68.0 15.0 23.0 -35.0 27.0 14.0 16.0 34.0 26.0 -13.0 20.0 22.0 10.0 12.0 19.0 -21.0 63.0 11.0 18.0 25.0 52.0 -29.0 -31.0 14.0 74.0 -69.0 -59.0 16.0 16.0 -25.0 -25.0 36.0Program Results
SB06ND EXAMPLE PROGRAM RESULTS The deadbeat feedback matrix F is -0.4819 -0.5782 -2.7595 -3.1093 0.0000 0.2121 -0.4462 0.7698 -1.5421 -0.5773