SGEESX(l)	     LAPACK driver routine (version 1.1)	    SGEESX(l)

NAME
  SGEESX - compute for an N-by-N real nonsymmetric matrix A, the eigenvalues,
  the real Schur form T, and, optionally, the matrix of	Schur vectors Z

SYNOPSIS

  SUBROUTINE SGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, WR, WI, VS,
		     LDVS, RCONDE, RCONDV, WORK, LWORK,	IWORK, LIWORK, BWORK,
		     INFO )

      CHARACTER	     JOBVS, SENSE, SORT

      INTEGER	     INFO, LDA,	LDVS, LIWORK, LWORK, N,	SDIM

      REAL	     RCONDE, RCONDV

      LOGICAL	     BWORK( * )

      INTEGER	     IWORK( * )

      REAL	     A(	LDA, * ), VS( LDVS, * ), WI( * ), WORK(	* ), WR( * )

      LOGICAL	     SELECT

      EXTERNAL	     SELECT

PURPOSE
  SGEESX computes for an N-by-N	real nonsymmetric matrix A, the	eigenvalues,
  the real Schur form T, and, optionally, the matrix of	Schur vectors Z.
  This gives the Schur factorization A = Z*T*(Z**T).

  Optionally, it also orders the eigenvalues on	the diagonal of	the real
  Schur	form so	that selected eigenvalues are at the top left; computes	a
  reciprocal condition number for the average of the selected eigenvalues
  (RCONDE); and	computes a reciprocal condition	number for the right invari-
  ant subspace corresponding to	the selected eigenvalues (RCONDV).  The	lead-
  ing columns of Z form	an orthonormal basis for this invariant	subspace.

  For further explanation of the reciprocal condition numbers RCONDE and
  RCONDV, see Section 4.10 of the LAPACK Users'	Guide (where these quantities
  are called s and sep respectively).

  A real matrix	is in real Schur form if it is upper quasi-triangular with
  1-by-1 and 2-by-2 blocks. 2-by-2 blocks will be standardized in the form
	    [  a  b  ]
	    [  c  a  ]

  where	b*c < 0. The eigenvalues of such a block are a +- sqrt(bc).

ARGUMENTS

  JOBVS	  (input) CHARACTER*1
	  = 'N': Schur vectors are not computed;
	  = 'V': Schur vectors are computed.

  SORT	  (input) CHARACTER*1
	  Specifies whether or not to order the	eigenvalues on the diagonal
	  of the Schur form.  =	'N': Eigenvalues are not ordered;
	  = 'S': Eigenvalues are ordered (see SELECT).

  SELECT  (input) LOGICAL FUNCTION of two REAL variables
	  SELECT must be declared EXTERNAL in the calling subroutine.  If
	  SORT = 'S', SELECT is	used to	select eigenvalues to sort to the top
	  left of the Schur form.  If SORT = 'N', SELECT is not	referenced.
	  An eigenvalue	WR(j)+sqrt(-1)*WI(j) is	selected if
	  SELECT(WR(j),WI(j)) is true; i.e., if	either one of a	complex	con-
	  jugate pair of eigenvalues is	selected, then both are.  Note that a
	  selected complex eigenvalue may no longer satisfy
	  SELECT(WR(j),WI(j)) =	.TRUE. after ordering, since ordering may
	  change the value of complex eigenvalues (especially if the eigen-
	  value	is ill-conditioned); in	this case INFO may be set to N+3 (see
	  INFO below).

  SENSE	  (input) CHARACTER*1
	  Determines which reciprocal condition	numbers	are computed.  = 'N':
	  None are computed;
	  = 'E': Computed for average of selected eigenvalues only;
	  = 'V': Computed for selected right invariant subspace	only;
	  = 'B': Computed for both.  If	SENSE =	'E', 'V' or 'B', SORT must
	  equal	'S'.

  N	  (input) INTEGER
	  The order of the matrix A. N >= 0.

  A	  (input/output) REAL array, dimension (LDA, N)
	  On entry, the	N-by-N matrix A.  On exit, A is	overwritten by its
	  real Schur form T.

  LDA	  (input) INTEGER
	  The leading dimension	of the array A.	 LDA >=	max(1,N).

  SDIM	  (output) INTEGER
	  If SORT = 'N', SDIM =	0.  If SORT = 'S', SDIM	= number of eigen-
	  values (after	sorting) for which SELECT is true. (Complex conjugate
	  pairs	for which SELECT is true for either eigenvalue count as	2.)

  WR	  (output) REAL	array, dimension (N)
	  WI	  (output) REAL	array, dimension (N) WR	and WI contain the
	  real and imaginary parts, respectively, of the computed eigen-
	  values, in the same order that they appear on	the diagonal of	the
	  output Schur form T.	Complex	conjugate pairs	of eigenvalues appear
	  consecutively	with the eigenvalue having the positive	imaginary
	  part first.

  VS	  (output) REAL	array, dimension (LDVS,N)
	  If JOBVS = 'V', VS contains the orthogonal matrix Z of Schur vec-
	  tors.	 If JOBVS = 'N', VS is not referenced.

  LDVS	  (input) INTEGER
	  The leading dimension	of the array VS.  LDVS >= 1, and if JOBVS =
	  'V', LDVS >= N.

  RCONDE  (output) REAL
	  If SENSE = 'E' or 'B', RCONDE	contains the reciprocal	condition
	  number for the average of the	selected eigenvalues.  Not referenced
	  if SENSE = 'N' or 'V'.

  RCONDV  (output) REAL
	  If SENSE = 'V' or 'B', RCONDV	contains the reciprocal	condition
	  number for the selected right	invariant subspace.  Not referenced
	  if SENSE = 'N' or 'E'.

  WORK	  (workspace/output) REAL array, dimension (LWORK)
	  On exit, if INFO = 0,	WORK(1)	returns	the optimal LWORK.

  LWORK	  (input) INTEGER
	  The dimension	of the array WORK.  LWORK >= max(1,3*N).  Also,	if
	  SENSE	= 'E' or 'V' or	'B', LWORK >= N+2*SDIM*(N-SDIM), where SDIM
	  is the number	of selected eigenvalues	computed by this routine.
	  Note that N+2*SDIM*(N-SDIM) <= N+N*N/2.  For good performance,
	  LWORK	must generally be larger.

  IWORK	  (workspace) INTEGER array, dimension (LIWORK)
	  Not referenced if SENSE = 'N'	or 'E'.

  LIWORK  (input) INTEGER
	  The dimension	of the array IWORK.  LIWORK >= 1; if SENSE = 'V' or
	  'B', LIWORK >= SDIM*(N-SDIM).

  BWORK	  (workspace) LOGICAL array, dimension (N)
	  Not referenced if SORT = 'N'.

  INFO	  (output) INTEGER
	  = 0: successful exit
	  < 0: if INFO = -i, the i-th argument had an illegal value.
	  > 0: if INFO = i, and	i is
	  <= N:	the QR algorithm failed	to compute all the
	  eigenvalues; elements	1:ILO-1	and i+1:N of WR	and WI contain those
	  eigenvalues which have converged; if JOBVS = 'V', VS contains	the
	  transformation which reduces A to its	partially converged Schur
	  form.	 = N+1:	the eigenvalues	could not be reordered because some
	  eigenvalues were too close to	separate (the problem is very ill-
	  conditioned);	= N+2: after reordering, roundoff changed values of
	  some complex eigenvalues so that leading eigenvalues in the Schur
	  form no longer satisfy SELECT=.TRUE.	This could also	be caused by
	  underflow due	to scaling.


Back to the listing of simple driver routines
Back to the listing of expert driver routines