DLASQ2(3)      LAPACK routine of NEC Numeric Library Collection      DLASQ2(3)



NAME
       DLASQ2

SYNOPSIS
       SUBROUTINE DLASQ2 (N, Z, INFO)



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)
                     N is INTEGER
                   The number of rows and columns in the matrix. N >= 0.

           Z         (input/output)
                     Z is 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)
                     INFO is 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 100*N
                              iterations (in inner while loop).  On exit Z holds
                              a qd array with the same eigenvalues as the given Z.
                         = 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).



LAPACK routine                  31 October 2017                      DLASQ2(3)