DGGBAL(l)		LAPACK routine (version	1.1)		    DGGBAL(l)

NAME
  DGGBAL - balance a pair of general real matrices (A,B) for the generalized
  eigenvalue problem A*X = lambda*B*X

SYNOPSIS

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

      CHARACTER	     JOB

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

      DOUBLE	     PRECISION A( LDA, * ), B( LDB, * ), LSCALE( * ), RSCALE(
		     * ), WORK(	* )

PURPOSE
  DGGBAL balances a pair of general real matrices (A,B)	for the	generalized
  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 the matrices A and B.  N	>= 0.

  A	  (input/output) DOUBLE	PRECISION array, dimension (LDA,N)
	  On entry, the	input matrix A.	 On exit,  A is	overwritten by the
	  balanced matrix.  If JOB = 'N', A is not referenced.

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

  B	  (input/output) DOUBLE	PRECISION array, dimension (LDB,N)
	  On entry, the	input matrix B.	 On exit,  B is	overwritten by the
	  balanced matrix.  If JOB = 'N', B is not referenced.

  LDB	  (input) INTEGER
	  The leading dimension	of the array 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) DOUBLE PRECISION array, dimension (N)
	  Details about	the permutations and scaling factors applied to	the
	  left side of A and B.	 If P(j) is the	index of the row and column
	  interchanged with row	and column j, and D(j) is the scaling factor
	  applied to row and column 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) DOUBLE PRECISION array, dimension (N)
	  Details about	the permutations and scaling factors applied to	the
	  right	side of	A and B.  If P(j) is the index of the row and column
	  interchanged with row	and column j, and D(j) is the scaling factor
	  applied to row and column 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.

  WORK	  (workspace) DOUBLE PRECISION 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