====================================================================
dlasq2 examples
====================================================================

====================================================================
Man Page Details
====================================================================

NAME
       DLASQ2  - all the eigenvalues of the symmetric positive definite tridi-
       agonal matrix associated with the qd array Z to high relative  accuracy
       are  computed to high relative accuracy, in the absence of denormaliza-
       tion, underflow and overflow

SYNOPSIS
       SUBROUTINE DLASQ2( N, Z, INFO )

           INTEGER        INFO, N

           DOUBLE         PRECISION Z( * )

  Purpose
  =======

  DLASQ2 computes all the eigenvalues of the symmetric positive 
  definite tridiagonal matrix associated with the qd array Z to high
  relative accuracy are computed to high relative accuracy, in the
  absence of denormalization, underflow and overflow.

  To see the relation of Z to the tridiagonal matrix, let L be a
  unit lower bidiagonal matrix with subdiagonals Z(2,4,6,,..) and
  let U be an upper bidiagonal matrix with 1's above and diagonal
  Z(1,3,5,,..). The tridiagonal is L*U or, if you prefer, the
  symmetric tridiagonal to which it is similar.

  Note : DLASQ2 defines a logical variable, IEEE, which is true
  on machines which follow ieee-754 floating-point standard in their
  handling of infinities and NaNs, and false otherwise. This variable
  is passed to DLASQ3.

  Arguments
  =========

  N     (input) INTEGER
        The number of rows and columns in the matrix. N >= 0.

  Z     (workspace) DOUBLE PRECISION array, dimension ( 4*N )
        On entry Z holds the qd array. On exit, entries 1 to N hold
        the eigenvalues in decreasing order, Z( 2*N+1 ) holds the
        trace, and Z( 2*N+2 ) holds the sum of the eigenvalues. If
        N > 2, then Z( 2*N+3 ) holds the iteration count, Z( 2*N+4 )
        holds NDIVS/NIN^2, and Z( 2*N+5 ) holds the percentage of
        shifts that failed.

  INFO  (output) INTEGER
        = 0: successful exit
        < 0: if the i-th argument is a scalar and had an illegal
             value, then INFO = -i, if the i-th argument is an
             array and the j-entry had an illegal value, then
             INFO = -(i*100+j)
        > 0: the algorithm failed
              = 1, a split was marked by a positive value in E
              = 2, current block of Z not diagonalized after 30*N
                   iterations (in inner while loop)
              = 3, termination criterion of outer while loop not met 
                   (program created more than N unreduced blocks)

  Further Details
  ===============
  Local Variables: I0:N0 defines a current unreduced segment of Z.
  The shifts are accumulated in SIGMA. Iteration count is in ITER.
  Ping-pong is controlled by PP (alternates between 0 and 1).

