Purpose
To estimate the "separation" between the matrices op(A) and
op(A)',
sepd(op(A),op(A)') = min norm(op(A)'*X*op(A) - X)/norm(X)
= 1 / norm(inv(Omega))
and/or the 1-norm of Theta, where op(A) = A or A' (A**T), and
Omega and Theta are linear operators associated to the real
discrete-time Lyapunov matrix equation
op(A)'*X*op(A) - X = C,
defined by
Omega(W) = op(A)'*W*op(A) - W,
Theta(W) = inv(Omega(op(W)'*X*op(A) + op(A)'*X*op(W))).
The 1-norm condition estimators are used.
Specification
SUBROUTINE SB03SY( JOB, TRANA, LYAPUN, N, T, LDT, U, LDU, XA,
$ LDXA, SEPD, THNORM, IWORK, DWORK, LDWORK,
$ INFO )
C .. Scalar Arguments ..
CHARACTER JOB, LYAPUN, TRANA
INTEGER INFO, LDT, LDU, LDWORK, LDXA, N
DOUBLE PRECISION SEPD, THNORM
C .. Array Arguments ..
INTEGER IWORK( * )
DOUBLE PRECISION DWORK( * ), T( LDT, * ), U( LDU, * ),
$ XA( LDXA, * )
Arguments
Mode Parameters
JOB CHARACTER*1
Specifies the computation to be performed, as follows:
= 'S': Compute the separation only;
= 'T': Compute the norm of Theta only;
= 'B': Compute both the separation and the norm of Theta.
TRANA CHARACTER*1
Specifies the form of op(A) to be used, as follows:
= 'N': op(A) = A (No transpose);
= 'T': op(A) = A**T (Transpose);
= 'C': op(A) = A**T (Conjugate transpose = Transpose).
LYAPUN CHARACTER*1
Specifies whether or not the original Lyapunov equations
should be solved, as follows:
= 'O': Solve the original Lyapunov equations, updating
the right-hand sides and solutions with the
matrix U, e.g., X <-- U'*X*U;
= 'R': Solve reduced Lyapunov equations only, without
updating the right-hand sides and solutions.
Input/Output Parameters
N (input) INTEGER
The order of the matrices A and X. N >= 0.
T (input) DOUBLE PRECISION array, dimension (LDT,N)
The leading N-by-N upper Hessenberg part of this array
must contain the upper quasi-triangular matrix T in Schur
canonical form from a Schur factorization of A.
LDT INTEGER
The leading dimension of array T. LDT >= MAX(1,N).
U (input) DOUBLE PRECISION array, dimension (LDU,N)
The leading N-by-N part of this array must contain the
orthogonal matrix U from a real Schur factorization of A.
If LYAPUN = 'R', the array U is not referenced.
LDU INTEGER
The leading dimension of array U.
LDU >= 1, if LYAPUN = 'R';
LDU >= MAX(1,N), if LYAPUN = 'O'.
XA (input) DOUBLE PRECISION array, dimension (LDXA,N)
The leading N-by-N part of this array must contain the
matrix product X*op(A), if LYAPUN = 'O', or U'*X*U*op(T),
if LYAPUN = 'R', in the Lyapunov equation.
If JOB = 'S', the array XA is not referenced.
LDXA INTEGER
The leading dimension of array XA.
LDXA >= 1, if JOB = 'S';
LDXA >= MAX(1,N), if JOB = 'T' or 'B'.
SEPD (output) DOUBLE PRECISION
If JOB = 'S' or JOB = 'B', and INFO >= 0, SEPD contains
the estimated quantity sepd(op(A),op(A)').
If JOB = 'T' or N = 0, SEPD is not referenced.
THNORM (output) DOUBLE PRECISION
If JOB = 'T' or JOB = 'B', and INFO >= 0, THNORM contains
the estimated 1-norm of operator Theta.
If JOB = 'S' or N = 0, THNORM is not referenced.
Workspace
IWORK INTEGER array, dimension (N*N)
DWORK DOUBLE PRECISION array, dimension (LDWORK)
LDWORK INTEGER
The length of the array DWORK.
LDWORK >= 0, if N = 0;
LDWORK >= MAX(3,2*N*N), if N > 0.
Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value;
= N+1: if T has (almost) reciprocal eigenvalues;
perturbed values were used to solve Lyapunov
equations (but the matrix T is unchanged).
Method
SEPD is defined as
sepd( op(A), op(A)' ) = sigma_min( K )
where sigma_min(K) is the smallest singular value of the
N*N-by-N*N matrix
K = kprod( op(A)', op(A)' ) - I(N**2).
I(N**2) is an N*N-by-N*N identity matrix, and kprod denotes the
Kronecker product. The routine estimates sigma_min(K) by the
reciprocal of an estimate of the 1-norm of inverse(K), computed as
suggested in [1]. This involves the solution of several discrete-
time Lyapunov equations, either direct or transposed. The true
reciprocal 1-norm of inverse(K) cannot differ from sigma_min(K) by
more than a factor of N.
The 1-norm of Theta is estimated similarly.
References
[1] Higham, N.J.
FORTRAN codes for estimating the one-norm of a real or
complex matrix, with applications to condition estimation.
ACM Trans. Math. Softw., 14, pp. 381-396, 1988.
Numerical Aspects
3 The algorithm requires 0(N ) operations.Further Comments
When SEPD is zero, the routine returns immediately, with THNORM (if requested) not set. In this case, the equation is singular. The option LYAPUN = 'R' may occasionally produce slightly worse or better estimates, and it is much faster than the option 'O'.Example
Program Text
NoneProgram Data
NoneProgram Results
None