Loading...
Searching...
No Matches

## dlasq2()

subroutine dlasq2 | ( | integer | n,
|  | double precision, dimension( * ) | z,
|  | integer | info )

DLASQ2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the qd Array Z to high relative accuracy. Used by sbdsqr and sstegr.

Download DLASQ2 + dependencies [TGZ] [ZIP] [TXT]

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.
      !>

Parameters

  [in]

  N

      !>          N is INTEGER
      !>        The number of rows and columns in the matrix. N >= 0.
      !>

  [in,out]

  Z

      !>          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.
      !>

  [out]

  INFO

      !>          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)
      !>

Author
  Univ. of Tennessee
  Univ. of California Berkeley
  Univ. of Colorado Denver
  NAG Ltd.

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).
      !>