Purpose
To construct the 2n-by-2n Hamiltonian or symplectic matrix S
associated to the linear-quadratic optimization problem, used to
solve the continuous- or discrete-time algebraic Riccati equation,
respectively.
For a continuous-time problem, S is defined by
( A -G )
S = ( ), (1)
( -Q -A')
and for a discrete-time problem by
-1 -1
( A A *G )
S = ( -1 -1 ), (2)
( QA A' + Q*A *G )
or
-T -T
( A + G*A *Q -G*A )
S = ( -T -T ), (3)
( -A *Q A )
where A, G, and Q are N-by-N matrices, with G and Q symmetric.
Matrix A must be nonsingular in the discrete-time case.
Specification
SUBROUTINE SB02MU( DICO, HINV, UPLO, N, A, LDA, G, LDG, Q, LDQ, S,
$ LDS, IWORK, DWORK, LDWORK, INFO )
C .. Scalar Arguments ..
CHARACTER DICO, HINV, UPLO
INTEGER INFO, LDA, LDG, LDQ, LDS, LDWORK, N
C .. Array Arguments ..
INTEGER IWORK(*)
DOUBLE PRECISION A(LDA,*), DWORK(*), G(LDG,*), Q(LDQ,*),
$ S(LDS,*)
Arguments
Mode Parameters
DICO CHARACTER*1
Specifies the type of the system as follows:
= 'C': Continuous-time system;
= 'D': Discrete-time system.
HINV CHARACTER*1
If DICO = 'D', specifies which of the matrices (2) or (3)
is constructed, as follows:
= 'D': The matrix S in (2) is constructed;
= 'I': The (inverse) matrix S in (3) is constructed.
HINV is not referenced if DICO = 'C'.
UPLO CHARACTER*1
Specifies which triangle of the matrices G and Q is
stored, as follows:
= 'U': Upper triangle is stored;
= 'L': Lower triangle is stored.
Input/Output Parameters
N (input) INTEGER
The order of the matrices A, G, and Q. N >= 0.
A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
On entry, the leading N-by-N part of this array must
contain the matrix A.
On exit, if DICO = 'D', and INFO = 0, the leading N-by-N
-1
part of this array contains the matrix A .
Otherwise, the array A is unchanged on exit.
LDA INTEGER
The leading dimension of array A. LDA >= MAX(1,N).
G (input) DOUBLE PRECISION array, dimension (LDG,N)
The leading N-by-N upper triangular part (if UPLO = 'U')
or lower triangular part (if UPLO = 'L') of this array
must contain the upper triangular part or lower triangular
part, respectively, of the symmetric matrix G. The stricly
lower triangular part (if UPLO = 'U') or stricly upper
triangular part (if UPLO = 'L') is not referenced.
LDG INTEGER
The leading dimension of array G. LDG >= MAX(1,N).
Q (input) DOUBLE PRECISION array, dimension (LDQ,N)
The leading N-by-N upper triangular part (if UPLO = 'U')
or lower triangular part (if UPLO = 'L') of this array
must contain the upper triangular part or lower triangular
part, respectively, of the symmetric matrix Q. The stricly
lower triangular part (if UPLO = 'U') or stricly upper
triangular part (if UPLO = 'L') is not referenced.
LDQ INTEGER
The leading dimension of array Q. LDQ >= MAX(1,N).
S (output) DOUBLE PRECISION array, dimension (LDS,2*N)
If INFO = 0, the leading 2N-by-2N part of this array
contains the Hamiltonian or symplectic matrix of the
problem.
LDS INTEGER
The leading dimension of array S. LDS >= MAX(1,2*N).
Workspace
IWORK INTEGER array, dimension (2*N)
DWORK DOUBLE PRECISION array, dimension (LDWORK)
On exit, if INFO = 0, DWORK(1) returns the optimal value
of LDWORK; if DICO = 'D', DWORK(2) returns the reciprocal
condition number of the given matrix A.
LDWORK INTEGER
The length of the array DWORK.
LDWORK >= 1 if DICO = 'C';
LDWORK >= MAX(2,4*N) if DICO = 'D'.
For optimum performance LDWORK should be larger, if
DICO = 'D'.
Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value;
= i: if the leading i-by-i (1 <= i <= N) upper triangular
submatrix of A is singular in discrete-time case;
= N+1: if matrix A is numerically singular in discrete-
time case.
Method
For a continuous-time problem, the 2n-by-2n Hamiltonian matrix (1) is constructed. For a discrete-time problem, the 2n-by-2n symplectic matrix (2) or (3) - the inverse of the matrix in (2) - is constructed.Numerical Aspects
The discrete-time case needs the inverse of the matrix A, hence
the routine should not be used when A is ill-conditioned.
3
The algorithm requires 0(n ) floating point operations in the
discrete-time case.
Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None