Purpose
To solve for X = op(U)'*op(U) either the stable non-negative
definite continuous-time Lyapunov equation
2
op(A)'*X + X*op(A) = -scale *op(B)'*op(B) (1)
or the convergent non-negative definite discrete-time Lyapunov
equation
2
op(A)'*X*op(A) - X = -scale *op(B)'*op(B) (2)
where op(K) = K or K' (i.e., the transpose of the matrix K), A is
an N-by-N matrix in real Schur form, op(B) is an M-by-N matrix,
U is an upper triangular matrix containing the Cholesky factor of
the solution matrix X, X = op(U)'*op(U), and scale is an output
scale factor, set less than or equal to 1 to avoid overflow in X.
If matrix B has full rank then the solution matrix X will be
positive-definite and hence the Cholesky factor U will be
nonsingular, but if B is rank deficient then X may only be
positive semi-definite and U will be singular.
In the case of equation (1) the matrix A must be stable (that
is, all the eigenvalues of A must have negative real parts),
and for equation (2) the matrix A must be convergent (that is,
all the eigenvalues of A must lie inside the unit circle).
Specification
SUBROUTINE SB03OU( DISCR, LTRANS, N, M, A, LDA, B, LDB, TAU, U,
$ LDU, SCALE, DWORK, LDWORK, INFO )
C .. Scalar Arguments ..
LOGICAL DISCR, LTRANS
INTEGER INFO, LDA, LDB, LDU, LDWORK, M, N
DOUBLE PRECISION SCALE
C .. Array Arguments ..
DOUBLE PRECISION A(LDA,*), B(LDB,*), DWORK(*), TAU(*), U(LDU,*)
Arguments
Mode Parameters
DISCR LOGICAL
Specifies the type of Lyapunov equation to be solved as
follows:
= .TRUE. : Equation (2), discrete-time case;
= .FALSE.: Equation (1), continuous-time case.
LTRANS LOGICAL
Specifies the form of op(K) to be used, as follows:
= .FALSE.: op(K) = K (No transpose);
= .TRUE. : op(K) = K**T (Transpose).
Input/Output Parameters
N (input) INTEGER
The order of the matrix A and the number of columns in
matrix op(B). N >= 0.
M (input) INTEGER
The number of rows in matrix op(B). M >= 0.
A (input) DOUBLE PRECISION array, dimension (LDA,N)
The leading N-by-N upper Hessenberg part of this array
must contain a real Schur form matrix S. The elements
below the upper Hessenberg part of the array A are not
referenced. The 2-by-2 blocks must only correspond to
complex conjugate pairs of eigenvalues (not to real
eigenvalues).
LDA INTEGER
The leading dimension of array A. LDA >= MAX(1,N).
B (input/output) DOUBLE PRECISION array, dimension (LDB,N)
if LTRANS = .FALSE., and dimension (LDB,M), if
LTRANS = .TRUE..
On entry, if LTRANS = .FALSE., the leading M-by-N part of
this array must contain the coefficient matrix B of the
equation.
On entry, if LTRANS = .TRUE., the leading N-by-M part of
this array must contain the coefficient matrix B of the
equation.
On exit, if LTRANS = .FALSE., the leading
MIN(M,N)-by-MIN(M,N) upper triangular part of this array
contains the upper triangular matrix R (as defined in
METHOD), and the M-by-MIN(M,N) strictly lower triangular
part together with the elements of the array TAU are
overwritten by details of the matrix P (also defined in
METHOD). When M < N, columns (M+1),...,N of the array B
are overwritten by the matrix Z (see METHOD).
On exit, if LTRANS = .TRUE., the leading
MIN(M,N)-by-MIN(M,N) upper triangular part of
B(1:N,M-N+1), if M >= N, or of B(N-M+1:N,1:M), if M < N,
contains the upper triangular matrix R (as defined in
METHOD), and the remaining elements (below the diagonal
of R) together with the elements of the array TAU are
overwritten by details of the matrix P (also defined in
METHOD). When M < N, rows 1,...,(N-M) of the array B
are overwritten by the matrix Z (see METHOD).
LDB INTEGER
The leading dimension of array B.
LDB >= MAX(1,M), if LTRANS = .FALSE.,
LDB >= MAX(1,N), if LTRANS = .TRUE..
TAU (output) DOUBLE PRECISION array of dimension (MIN(N,M))
This array contains the scalar factors of the elementary
reflectors defining the matrix P.
U (output) DOUBLE PRECISION array of dimension (LDU,N)
The leading N-by-N upper triangular part of this array
contains the Cholesky factor of the solution matrix X of
the problem, X = op(U)'*op(U).
The array U may be identified with B in the calling
statement, if B is properly dimensioned, and the
intermediate results returned in B are not needed.
LDU INTEGER
The leading dimension of array U. LDU >= MAX(1,N).
SCALE (output) DOUBLE PRECISION
The scale factor, scale, set less than or equal to 1 to
prevent the solution overflowing.
Workspace
DWORK DOUBLE PRECISION array, dimension (LDWORK)
On exit, if INFO = 0, or INFO = 1, DWORK(1) returns the
optimal value of LDWORK.
LDWORK INTEGER
The length of the array DWORK. LDWORK >= MAX(1,4*N).
For optimum performance LDWORK should sometimes be larger.
Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value;
= 1: if the Lyapunov equation is (nearly) singular
(warning indicator);
if DISCR = .FALSE., this means that while the matrix
A has computed eigenvalues with negative real parts,
it is only just stable in the sense that small
perturbations in A can make one or more of the
eigenvalues have a non-negative real part;
if DISCR = .TRUE., this means that while the matrix
A has computed eigenvalues inside the unit circle,
it is nevertheless only just convergent, in the
sense that small perturbations in A can make one or
more of the eigenvalues lie outside the unit circle;
perturbed values were used to solve the equation
(but the matrix A is unchanged);
= 2: if matrix A is not stable (that is, one or more of
the eigenvalues of A has a non-negative real part),
if DISCR = .FALSE., or not convergent (that is, one
or more of the eigenvalues of A lies outside the
unit circle), if DISCR = .TRUE.;
= 3: if matrix A has two or more consecutive non-zero
elements on the first sub-diagonal, so that there is
a block larger than 2-by-2 on the diagonal;
= 4: if matrix A has a 2-by-2 diagonal block with real
eigenvalues instead of a complex conjugate pair.
Method
The method used by the routine is based on the Bartels and
Stewart method [1], except that it finds the upper triangular
matrix U directly without first finding X and without the need
to form the normal matrix op(B)'*op(B) [2].
If LTRANS = .FALSE., the matrix B is factored as
B = P ( R ), M >= N, B = P ( R Z ), M < N,
( 0 )
(QR factorization), where P is an M-by-M orthogonal matrix and
R is a square upper triangular matrix.
If LTRANS = .TRUE., the matrix B is factored as
B = ( 0 R ) P, M >= N, B = ( Z ) P, M < N,
( R )
(RQ factorization), where P is an M-by-M orthogonal matrix and
R is a square upper triangular matrix.
These factorizations are used to solve the continuous-time
Lyapunov equation in the canonical form
2
op(A)'*op(U)'*op(U) + op(U)'*op(U)*op(A) = -scale *op(F)'*op(F),
or the discrete-time Lyapunov equation in the canonical form
2
op(A)'*op(U)'*op(U)*op(A) - op(U)'*op(U) = -scale *op(F)'*op(F),
where U and F are N-by-N upper triangular matrices, and
F = R, if M >= N, or
F = ( R ), if LTRANS = .FALSE., or
( 0 )
F = ( 0 Z ), if LTRANS = .TRUE., if M < N.
( 0 R )
The canonical equation is solved for U.
References
[1] Bartels, R.H. and Stewart, G.W.
Solution of the matrix equation A'X + XB = C.
Comm. A.C.M., 15, pp. 820-826, 1972.
[2] Hammarling, S.J.
Numerical solution of the stable, non-negative definite
Lyapunov equation.
IMA J. Num. Anal., 2, pp. 303-325, 1982.
Numerical Aspects
3 The algorithm requires 0(N ) operations and is backward stable.Further Comments
The Lyapunov equation may be very ill-conditioned. In particular, if A is only just stable (or convergent) then the Lyapunov equation will be ill-conditioned. "Large" elements in U relative to those of A and B, or a "small" value for scale, are symptoms of ill-conditioning. A condition estimate can be computed using SLICOT Library routine SB03MD.Example
Program Text
NoneProgram Data
NoneProgram Results
None