<HTML>
<HEAD><TITLE>SG03AX - SLICOT Library Routine Documentation</TITLE>
</HEAD>
<BODY>
<H2><A Name="SG03AX">SG03AX</A></H2>
<H3>
Solving a discrete-time generalized Lyapunov equation with matrix A quasi-triangular and matrix E upper triangular
</H3>
<A HREF ="#Specification"><B>[Specification]</B></A>
<A HREF ="#Arguments"><B>[Arguments]</B></A>
<A HREF ="#Method"><B>[Method]</B></A>
<A HREF ="#References"><B>[References]</B></A>
<A HREF ="#Comments"><B>[Comments]</B></A>
<A HREF ="#Example"><B>[Example]</B></A>
<P>
<B><FONT SIZE="+1">Purpose</FONT></B>
<PRE>
To solve for X either the reduced generalized discrete-time
Lyapunov equation
T T
A * X * A - E * X * E = SCALE * Y (1)
or
T T
A * X * A - E * X * E = SCALE * Y (2)
where the right hand side Y is symmetric. A, E, Y, and the
solution X are N-by-N matrices. The pencil A - lambda * E must be
in generalized Schur form (A upper quasitriangular, E upper
triangular). SCALE is an output scale factor, set to avoid
overflow in X.
</PRE>
<A name="Specification"><B><FONT SIZE="+1">Specification</FONT></B></A>
<PRE>
SUBROUTINE SG03AX( TRANS, N, A, LDA, E, LDE, X, LDX, SCALE, INFO )
C .. Scalar Arguments ..
CHARACTER TRANS
DOUBLE PRECISION SCALE
INTEGER INFO, LDA, LDE, LDX, N
C .. Array Arguments ..
DOUBLE PRECISION A(LDA,*), E(LDE,*), X(LDX,*)
</PRE>
<A name="Arguments"><B><FONT SIZE="+1">Arguments</FONT></B></A>
<P>
<B>Mode Parameters</B>
<PRE>
TRANS CHARACTER*1
Specifies whether the transposed equation is to be solved
or not:
= 'N': Solve equation (1);
= 'T': Solve equation (2).
</PRE>
<B>Input/Output Parameters</B>
<PRE>
N (input) INTEGER
The order of the matrix A. N >= 0.
A (input) DOUBLE PRECISION array, dimension (LDA,N)
The leading N-by-N upper Hessenberg part of this array
must contain the quasitriangular matrix A.
LDA INTEGER
The leading dimension of the array A. LDA >= MAX(1,N).
E (input) DOUBLE PRECISION array, dimension (LDE,N)
The leading N-by-N upper triangular part of this array
must contain the matrix E.
LDE INTEGER
The leading dimension of the array E. LDE >= MAX(1,N).
X (input/output) DOUBLE PRECISION array, dimension (LDX,N)
On entry, the leading N-by-N part of this array must
contain the right hand side matrix Y of the equation. Only
the upper triangular part of this matrix need be given.
On exit, the leading N-by-N part of this array contains
the solution matrix X of the equation.
LDX INTEGER
The leading dimension of the array X. LDX >= MAX(1,N).
SCALE (output) DOUBLE PRECISION
The scale factor set to avoid overflow in X.
(0 < SCALE <= 1)
</PRE>
<B>Error Indicator</B>
<PRE>
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value;
= 1: equation is (almost) singular to working precision;
perturbed values were used to solve the equation
(but the matrices A and E are unchanged).
</PRE>
<A name="Method"><B><FONT SIZE="+1">Method</FONT></B></A>
<PRE>
The solution X of (1) or (2) is computed via block back
substitution or block forward substitution, respectively. (See
[1] and [2] for details.)
</PRE>
<A name="References"><B><FONT SIZE="+1">References</FONT></B></A>
<PRE>
[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] Penzl, T.
Numerical solution of generalized Lyapunov equations.
Advances in Comp. Math., vol. 8, pp. 33-48, 1998.
</PRE>
<A name="Numerical Aspects"><B><FONT SIZE="+1">Numerical Aspects</FONT></B></A>
<PRE>
8/3 * N**3 flops are required by the routine. 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.
</PRE>
<A name="Comments"><B><FONT SIZE="+1">Further Comments</FONT></B></A>
<PRE>
None
</PRE>
<A name="Example"><B><FONT SIZE="+1">Example</FONT></B></A>
<P>
<B>Program Text</B>
<PRE>
None
</PRE>
<B>Program Data</B>
<PRE>
None
</PRE>
<B>Program Results</B>
<PRE>
None
</PRE>
<HR>
<A HREF=support.html><B>Return to Supporting Routines index</B></A></BODY>
</HTML>