CGGBAL(l)		LAPACK routine (version	1.1)		    CGGBAL(l)

NAME
  CGGBAL - balance a pair of general complex matrices (A,B) for	the general-
  ized eigenvalue problem A*X =	lambda*B*X

SYNOPSIS

  SUBROUTINE CGGBAL( JOB, N, A,	LDA, B,	LDB, ILO, IHI, LSCALE, RSCALE, WORK,
		     INFO )

      CHARACTER	     JOB

      INTEGER	     IHI, ILO, INFO, LDA, LDB, N

      REAL	     LSCALE( * ), RSCALE( * ), WORK( * )

      COMPLEX	     A(	LDA, * ), B( LDB, * )

PURPOSE
  CGGBAL balances a pair of general complex matrices (A,B) for the general-
  ized eigenvalue problem A*X =	lambda*B*X.  This involves, first, permuting
  A and	B by similarity	transformations	to isolate eigenvalues in the first 1
  to ILO-1 and last IHI+1 to N elements	on the diagonal; and second, applying
  a diagonal similarity
  transformation to rows and and columns ILO to	IHI to make the	rows and
  columns as close in norm as possible.	 Both steps are	optional.

  Balancing may	reduce the 1-norm of the matrices, and improve the accuracy
  of the computed eigenvalues and/or eigenvectors.

ARGUMENTS

  JOB	  (input) CHARACTER*1
	  Specifies the	operations to be performed on A	and B:
	  = 'N':  none:	 simply	set ILO	= 1, IHI = N, LSCALE(I)	= 1.0 and
	  RSCALE(I) = 1.0 for i=1,...,N; = 'P':	 permute only;
	  = 'S':  scale	only;
	  = 'B':  both permute and scale.

  N	  (input) INTEGER
	  The order of matrices	A and B.  N >= 0.

  A	  (input/output) COMPLEX array,	dimension (LDA,N)
	  On entry, the	input matrix A.	 On exit, A is overwritten by the
	  balanced matrix.

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

  B	  (input/output) COMPLEX array,	dimension (LDB,N)
	  On entry, the	input matrix B.	 On exit, B is overwritten by the
	  balanced matrix.

  LDB	  (input) INTEGER
	  The leading dimension	of the matrix B. LDB >=	max(1,N).

  ILO	  (output) INTEGER
	  IHI	  (output) INTEGER ILO and IHI are set to integers such	that
	  on exit A(i,j) = 0 and B(i,j)	= 0 if i > j and j = 1,...,ILO-1 or i
	  = IHI+1,...,N.  If JOB = 'N' or 'S', ILO = 1 and IHI = N.

  LSCALE  (output) REAL	array, dimension (N)
	  Details of the permutations and scaling factors applied to the left
	  side of A and	B.  If P(j) is the index of the	row interchanged with
	  row j, and D(j) is the scaling factor	applied	to row j, then
	  LSCALE(j) = P(j)    for J = 1,...,ILO-1 = D(j)    for	J =
	  ILO,...,IHI =	P(j)	for J =	IHI+1,...,N.  The order	in which the
	  interchanges are made	is N to	IHI+1, then 1 to ILO-1.

  RSCALE  (output) REAL	array, dimension (N)
	  Details of the permutations and scaling factors applied to the
	  right	side of	A and B.  If P(j) is the index of the row inter-
	  changed with row j, and D(j) is the scaling factor applied to	row
	  j, then RSCALE(j) = P(j)    for J = 1,...,ILO-1 = D(j)    for	J =
	  ILO,...,IHI =	P(j)	for J =	IHI+1,...,N.  The order	in which the
	  interchanges are made	is N to	IHI+1, then 1 to ILO-1.

  WORK	  (workspace) REAL array, dimension (6*N)

  INFO	  (output) INTEGER
	  = 0:	successful exit.
	  < 0:	if INFO	= -i, the i-th argument	had an illegal value.

FURTHER	DETAILS
  See R.C. WARD, Balancing the generalized eigenvalue problem,
		 SIAM J. Sci. Stat. Comp. 2 (1981), 141-152.


Back to the listing of computational routines for eigenvalue problems