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