DSPGVX(3)             LAPACK driver routine (version 3.1)            DSPGVX(3)



NAME
       DSPGVX  -  selected eigenvalues, and optionally, eigenvectors of a real
       generalized    symmetric-definite    eigenproblem,    of    the    form
       A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x

SYNOPSIS
       SUBROUTINE DSPGVX( ITYPE, JOBZ, RANGE, UPLO, N, AP, BP, VL, VU, IL, IU,
                          ABSTOL, M, W, Z, LDZ, WORK, IWORK, IFAIL, INFO )

           CHARACTER      JOBZ, RANGE, UPLO

           INTEGER        IL, INFO, ITYPE, IU, LDZ, M, N

           DOUBLE         PRECISION ABSTOL, VL, VU

           INTEGER        IFAIL( * ), IWORK( * )

           DOUBLE         PRECISION AP( * ), BP( * ), W( * ), WORK(  *  ),  Z(
                          LDZ, * )

PURPOSE
       DSPGVX computes selected eigenvalues, and optionally, eigenvectors of a
       real  generalized  symmetric-definite   eigenproblem,   of   the   form
       A*x=(lambda)*B*x,  A*Bx=(lambda)*x,  or B*A*x=(lambda)*x.  Here A and B
       are assumed to be symmetric, stored in packed storage, and  B  is  also
       positive  definite.   Eigenvalues  and  eigenvectors can be selected by
       specifying either a range of values or  a  range  of  indices  for  the
       desired eigenvalues.


ARGUMENTS
       ITYPE   (input) INTEGER
               Specifies the problem type to be solved:
               = 1:  A*x = (lambda)*B*x
               = 2:  A*B*x = (lambda)*x
               = 3:  B*A*x = (lambda)*x

       JOBZ    (input) CHARACTER*1
               = 'N':  Compute eigenvalues only;
               = 'V':  Compute eigenvalues and eigenvectors.

       RANGE   (input) CHARACTER*1
               = 'A': all eigenvalues will be found.
               =  'V':  all eigenvalues in the half-open interval (VL,VU] will
               be found.  = 'I': the IL-th through IU-th eigenvalues  will  be
               found.

       UPLO    (input) CHARACTER*1
               = 'U':  Upper triangle of A and B are stored;
               = 'L':  Lower triangle of A and B are stored.

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

       AP      (input/output) DOUBLE PRECISION array, dimension (N*(N+1)/2)
               On  entry,  the upper or lower triangle of the symmetric matrix
               A, packed columnwise in a linear array.  The j-th column  of  A
               is  stored  in  the  array AP as follows: if UPLO = 'U', AP(i +
               (j-1)*j/2) =  A(i,j)  for  1<=i<=j;  if  UPLO  =  'L',  AP(i  +
               (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

               On exit, the contents of AP are destroyed.

       BP      (input/output) DOUBLE PRECISION array, dimension (N*(N+1)/2)
               On  entry,  the upper or lower triangle of the symmetric matrix
               B, packed columnwise in a linear array.  The j-th column  of  B
               is  stored  in  the  array BP as follows: if UPLO = 'U', BP(i +
               (j-1)*j/2) =  B(i,j)  for  1<=i<=j;  if  UPLO  =  'L',  BP(i  +
               (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.

               On exit, the triangular factor U or L from the Cholesky factor-
               ization B = U**T*U or B = L*L**T, in the same storage format as
               B.

       VL      (input) DOUBLE PRECISION
               VU       (input)  DOUBLE  PRECISION If RANGE='V', the lower and
               upper bounds of the interval to be searched for eigenvalues. VL
               < VU.  Not referenced if RANGE = 'A' or 'I'.

       IL      (input) INTEGER
               IU      (input) INTEGER If RANGE='I', the indices (in ascending
               order) of the smallest and largest eigenvalues to be  returned.
               1  <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.  Not
               referenced if RANGE = 'A' or 'V'.

       ABSTOL  (input) DOUBLE PRECISION
               The absolute error tolerance for the eigenvalues.  An  approxi-
               mate  eigenvalue is accepted as converged when it is determined
               to lie in an interval [a,b] of width less than or equal to

               ABSTOL + EPS *   max( |a|,|b| ) ,

               where EPS is the machine precision.  If ABSTOL is less than  or
               equal  to zero, then  EPS*|T|  will be used in its place, where
               |T| is the 1-norm of the tridiagonal matrix obtained by  reduc-
               ing A to tridiagonal form.

               Eigenvalues will be computed most accurately when ABSTOL is set
               to twice the underflow threshold 2*DLAMCH('S'), not  zero.   If
               this  routine  returns with INFO>0, indicating that some eigen-
               vectors did not converge, try setting ABSTOL to  2*DLAMCH('S').

       M       (output) INTEGER
               The  total number of eigenvalues found.  0 <= M <= N.  If RANGE
               = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.

       W       (output) DOUBLE PRECISION array, dimension (N)
               On normal exit, the  first  M  elements  contain  the  selected
               eigenvalues in ascending order.

       Z       (output) DOUBLE PRECISION array, dimension (LDZ, max(1,M))
               If  JOBZ  = 'N', then Z is not referenced.  If JOBZ = 'V', then
               if INFO = 0, the first M columns of Z contain  the  orthonormal
               eigenvectors  of  the  matrix  A  corresponding to the selected
               eigenvalues, with the i-th column of Z holding the  eigenvector
               associated  with W(i).  The eigenvectors are normalized as fol-
               lows: if ITYPE  =  1  or  2,  Z**T*B*Z  =  I;  if  ITYPE  =  3,
               Z**T*inv(B)*Z = I.

               If an eigenvector fails to converge, then that column of Z con-
               tains the latest approximation  to  the  eigenvector,  and  the
               index  of the eigenvector is returned in IFAIL.  Note: the user
               must ensure that at least max(1,M) columns are supplied in  the
               array  Z;  if RANGE = 'V', the exact value of M is not known in
               advance and an upper bound must be used.

       LDZ     (input) INTEGER
               The leading dimension of the array Z.  LDZ >= 1, and if JOBZ  =
               'V', LDZ >= max(1,N).

       WORK    (workspace) DOUBLE PRECISION array, dimension (8*N)

       IWORK   (workspace) INTEGER array, dimension (5*N)

       IFAIL   (output) INTEGER array, dimension (N)
               If  JOBZ = 'V', then if INFO = 0, the first M elements of IFAIL
               are zero.  If INFO > 0, then IFAIL contains the indices of  the
               eigenvectors  that  failed  to  converge.   If JOBZ = 'N', then
               IFAIL is not referenced.

       INFO    (output) INTEGER
               = 0:  successful exit
               < 0:  if INFO = -i, the i-th argument had an illegal value
               > 0:  DPPTRF or DSPEVX returned an error code:
               <= N:  if INFO = i, DSPEVX failed to converge;  i  eigenvectors
               failed  to  converge.  Their indices are stored in array IFAIL.
               > N:   if INFO = N + i, for 1 <= i <= N, then the leading minor
               of order i of B is not positive definite.  The factorization of
               B could not be completed and  no  eigenvalues  or  eigenvectors
               were computed.

FURTHER DETAILS
       Based on contributions by
          Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA




 LAPACK driver routine (version 3.N1o)vember 2006                       DSPGVX(3)