Previous: dsptrs Up: ../lapack-d.html Next: dstein


dstebz


 NAME
      DSTEBZ - compute the eigenvalues of a symmetric tridiagonal
      matrix T

 SYNOPSIS
      SUBROUTINE DSTEBZ( RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL,
                         D, E, M, NSPLIT, W, IBLOCK, ISPLIT, WORK,
                         IWORK, INFO )

          CHARACTER      ORDER, RANGE

          INTEGER        IL, INFO, IU, M, N, NSPLIT

          DOUBLE         PRECISION ABSTOL, VL, VU

          INTEGER        IBLOCK( * ), ISPLIT( * ), IWORK( * )

          DOUBLE         PRECISION D( * ), E( * ), W( * ), WORK( *
                         )

 PURPOSE
      DSTEBZ computes the eigenvalues of a symmetric tridiagonal
      matrix T.  The user may ask for all eigenvalues, all eigen-
      values in the half-open interval (VL, VU], or the IL-th
      through IU-th eigenvalues.

      See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiago-
      nal Matrix", Report CS41, Computer Science Dept., Stanford
      University, July 21, 1966.

 ARGUMENTS
      RANGE   (input) CHARACTER
              = 'A': ("All")   all eigenvalues will be found.
              = 'V': ("Value") all eigenvalues in the half-open
              interval (VL, VU] will be found.  = 'I': ("Index")
              the IL-th through IU-th eigenvalues (of the entire
              matrix) will be found.

      ORDER   (input) CHARACTER
              = 'B': ("By Block") the eigenvalues will be grouped
              by split-off block (see IBLOCK, ISPLIT) and ordered
              from smallest to largest within the block.  = 'E':
              ("Entire matrix") the eigenvalues for the entire
              matrix will be ordered from smallest to largest.

      N       (input) INTEGER
              The dimension of the tridiagonal matrix T.  N >= 0.

      VL      (input) DOUBLE PRECISION
              If RANGE='V', the lower bound of the interval to be
              searched for eigenvalues.  Eigenvalues less than or

              equal to VL will not be returned.  Not referenced if
              RANGE='A' or 'I'.

      VU      (input) DOUBLE PRECISION
              If RANGE='V', the upper bound of the interval to be
              searched for eigenvalues.  Eigenvalues greater than
              VU will not be returned.  VU must be greater than
              VL.  Not referenced if RANGE='A' or 'I'.

      IL      (input) INTEGER
              If RANGE='I', the index (from smallest to largest)
              of the smallest eigenvalue to be returned.  IL must
              be at least 1.  Not referenced if RANGE='A' or 'V'.

      IU      (input) INTEGER
              If RANGE='I', the index (from smallest to largest)
              of the largest eigenvalue to be returned.  IU must
              be at least IL and no greater than N.  Not refer-
              enced if RANGE='A' or 'V'.

      ABSTOL  (input) DOUBLE PRECISION
              The absolute tolerance for the eigenvalues.  An
              eigenvalue (or cluster) is considered to be located
              if it has been determined to lie in an interval
              whose width is ABSTOL or less.  If ABSTOL is less
              than or equal to zero, then ULP*|T| will be used,
              where |T| means the 1-norm of T.

      D       (input) DOUBLE PRECISION array, dimension (N)
              The n diagonal elements of the tridiagonal matrix T.
              To avoid overflow, the matrix must be scaled so that
              its largest entry is no greater than overflow**(1/2)
              * underflow**(1/4) in absolute value, and for
              greatest accuracy, it should not be much smaller
              than that.

      E       (input) DOUBLE PRECISION array, dimension (N-1)
              The (n-1) off-diagonal elements of the tridiagonal
              matrix T.  To avoid overflow, the matrix must be
              scaled so that its largest entry is no greater than
              overflow**(1/2) * underflow**(1/4) in absolute
              value, and for greatest accuracy, it should not be
              much smaller than that.

      M       (output) INTEGER
              The actual number of eigenvalues found. 0 <= M <= N.
              (See also the description of INFO=2,3.)

      NSPLIT  (output) INTEGER
              The number of diagonal blocks in the matrix T.  1 <=
              NSPLIT <= N.

      W       (output) DOUBLE PRECISION array, dimension (N)
              On exit, the first M elements of W will contain the
              eigenvalues.  (DSTEBZ may use the remaining N-M ele-
              ments as workspace.)

      IBLOCK  (output) INTEGER array, dimension (N)
              At each row/column j where E(j) is zero or small,
              the matrix T is considered to split into a block
              diagonal matrix.  On exit, IBLOCK(i) specifies which
              block (from 1 to the number of blocks) the eigen-
              value W(i) belongs to.  (DSTEBZ may use the remain-
              ing N-M elements as workspace.)

      ISPLIT  (output) INTEGER array, dimension (N)
              The splitting points, at which T breaks up into sub-
              matrices.  The first submatrix consists of
              rows/columns 1 to ISPLIT(1), the second of
              rows/columns ISPLIT(1)+1 through ISPLIT(2), etc.,
              and the NSPLIT-th consists of rows/columns
              ISPLIT(NSPLIT-1)+1 through ISPLIT(NSPLIT)=N.  (Only
              the first NSPLIT elements will actually be used, but
              since the user cannot know a priori what value
              NSPLIT will have, N words must be reserved for
              ISPLIT.)

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

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

      INFO    (output) INTEGER
              = 0:  successful exit
              < 0:  if INFO = -i, the i-th argument had an illegal
              value
              > 0:  some or all of the eigenvalues failed to con-
              verge or
              were not computed:
              =1 or 3: Bisection failed to converge for some
              eigenvalues; these eigenvalues are flagged by a
              negative block number.  The effect is that the
              eigenvalues may not be as accurate as the absolute
              and relative tolerances.  This is generally caused
              by unexpectedly inaccurate arithmetic.  =2 or 3:
              RANGE='I' only: Not all of the eigenvalues
              IL:IU were found.
              Effect: M < IU+1-IL
              Cause:  non-monotonic arithmetic, causing the Sturm
              sequence to be non-monotonic.  Cure:   recalculate,
              using RANGE='A', and pick
              out eigenvalues IL:IU.  In some cases, increasing
              the PARAMETER "FUDGE" may make things work.  = 4:
              RANGE='I', and the Gershgorin interval initially
              used was too small.  No eigenvalues were computed.

              Probable cause: your machine has sloppy floating-
              point arithmetic.  Cure: Increase the PARAMETER
              "FUDGE", recompile, and try again.

 PARAMETERS
      RELFAC  DOUBLE PRECISION, default = 2.0e0
              The relative tolerance.  An interval (a,b] lies
              within "relative tolerance" if  b-a <
              RELFAC*ulp*max(|a|,|b|), where "ulp" is the machine
              precision (distance from 1 to the next larger float-
              ing point number.)

      FUDGE   DOUBLE PRECISION, default = 2
              A "fudge factor" to widen the Gershgorin intervals.
              Ideally, a value of 1 should work, but on machines
              with sloppy arithmetic, this needs to be larger.
              The default for publicly released versions should be
              large enough to handle the worst machine around.
              Note that this has no effect on accuracy of the
              solution.