Purpose
To solve for X the generalized Sylvester equation
T T
A * X * C + E * X * D = SCALE * Y, (1)
or the transposed equation
T T
A * X * C + E * X * D = SCALE * Y, (2)
where A and E are real M-by-M matrices, C and D are real N-by-N
matrices, X and Y are real M-by-N matrices. N is either 1 or 2.
The pencil A - lambda * E must be in generalized real Schur form
(A upper quasitriangular, E upper triangular). SCALE is an output
scale factor, set to avoid overflow in X.
Specification
SUBROUTINE SG03BW( TRANS, M, N, A, LDA, C, LDC, E, LDE, D, LDD, X,
$ LDX, SCALE, INFO )
C .. Scalar Arguments ..
CHARACTER TRANS
DOUBLE PRECISION SCALE
INTEGER INFO, LDA, LDC, LDD, LDE, LDX, M, N
C .. Array Arguments ..
DOUBLE PRECISION A(LDA,*), C(LDC,*), D(LDD,*), E(LDE,*), X(LDX,*)
Arguments
Mode Parameters
TRANS CHARACTER*1
Specifies whether the transposed equation is to be solved
or not:
= 'N': Solve equation (1);
= 'T': Solve equation (2).
Input/Output Parameters
M (input) INTEGER
The order of the matrices A and E. M >= 0.
N (input) INTEGER
The order of the matrices C and D. N = 1 or N = 2.
A (input) DOUBLE PRECISION array, dimension (LDA,M)
The leading M-by-M part of this array must contain the
upper quasitriangular matrix A. The elements below the
upper Hessenberg part are not referenced.
LDA INTEGER
The leading dimension of the array A. LDA >= MAX(1,M).
C (input) DOUBLE PRECISION array, dimension (LDC,N)
The leading N-by-N part of this array must contain the
matrix C.
LDC INTEGER
The leading dimension of the array C. LDC >= MAX(1,N).
E (input) DOUBLE PRECISION array, dimension (LDE,M)
The leading M-by-M part of this array must contain the
upper triangular matrix E. The elements below the main
diagonal are not referenced.
LDE INTEGER
The leading dimension of the array E. LDE >= MAX(1,M).
D (input) DOUBLE PRECISION array, dimension (LDD,N)
The leading N-by-N part of this array must contain the
matrix D.
LDD INTEGER
The leading dimension of the array D. LDD >= MAX(1,N).
X (input/output) DOUBLE PRECISION array, dimension (LDX,N)
On entry, the leading M-by-N part of this array must
contain the right hand side matrix Y.
On exit, the leading M-by-N part of this array contains
the solution matrix X.
LDX INTEGER
The leading dimension of the array X. LDX >= MAX(1,M).
SCALE (output) DOUBLE PRECISION
The scale factor set to avoid overflow in X.
0 < SCALE <= 1.
Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value;
= 1: the generalized Sylvester equation is (nearly)
singular to working precision; perturbed values
were used to solve the equation (but the matrices
A, C, D, and E are unchanged).
Method
The method used by the routine is based on a generalization of the algorithm due to Bartels and Stewart [1]. See also [2] and [3] for details.References
[1] Bartels, R.H., Stewart, G.W.
Solution of the equation A X + X B = C.
Comm. A.C.M., 15, pp. 820-826, 1972.
[2] Gardiner, J.D., Laub, A.J., Amato, J.J., Moler, C.B.
Solution of the Sylvester Matrix Equation
A X B**T + C X D**T = E.
A.C.M. Trans. Math. Soft., vol. 18, no. 2, pp. 223-231, 1992.
[3] Penzl, T.
Numerical solution of generalized Lyapunov equations.
Advances in Comp. Math., vol. 8, pp. 33-48, 1998.
Numerical Aspects
The routine requires about 2 * N * M**2 flops. Note that we count a single floating point arithmetic operation as one flop. The algorithm is backward stable if the eigenvalues of the pencil A - lambda * E are real. Otherwise, linear systems of order at most 4 are involved into the computation. These systems are solved by Gauss elimination with complete pivoting. The loss of stability of the Gauss elimination with complete pivoting is rarely encountered in practice.Further Comments
When near singularity is detected, perturbed values are used to solve the equation (but the given matrices are unchanged).Example
Program Text
NoneProgram Data
NoneProgram Results
None