117 SUBROUTINE dstev( JOBZ, N, D, E, Z, LDZ, WORK, INFO )
129 DOUBLE PRECISION d( * ), e( * ), work( * ), z( ldz, * )
135 DOUBLE PRECISION zero, one
136 parameter( zero = 0.0d0, one = 1.0d0 )
141 DOUBLE PRECISION bignum, eps, rmax, rmin, safmin, sigma, smlnum,
159 wantz =
lsame( jobz,
'V' )
162 IF( .NOT.( wantz .OR.
lsame( jobz,
'N' ) ) )
THEN
164 ELSE IF( n.LT.0 )
THEN
166 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
171 CALL
xerbla(
'DSTEV ', -info )
188 safmin =
dlamch(
'Safe minimum' )
189 eps =
dlamch(
'Precision' )
190 smlnum = safmin / eps
191 bignum = one / smlnum
192 rmin = sqrt( smlnum )
193 rmax = sqrt( bignum )
198 tnrm =
dlanst(
'M', n, d, e )
199 IF( tnrm.GT.zero .AND. tnrm.LT.rmin )
THEN
202 ELSE IF( tnrm.GT.rmax )
THEN
206 IF( iscale.EQ.1 )
THEN
207 CALL
dscal( n, sigma, d, 1 )
208 CALL
dscal( n-1, sigma, e( 1 ), 1 )
214 IF( .NOT.wantz )
THEN
215 CALL
dsterf( n, d, e, info )
217 CALL
dsteqr(
'I', n, d, e, z, ldz, work, info )
222 IF( iscale.EQ.1 )
THEN
228 CALL
dscal( imax, one / sigma, d, 1 )
subroutine dsteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
DSTEQR
subroutine dsterf(N, D, E, INFO)
DSTERF
subroutine xerbla(SRNAME, INFO)
XERBLA
logical function lsame(CA, CB)
LSAME
subroutine dscal(N, DA, DX, INCX)
DSCAL
double precision function dlanst(NORM, N, D, E)
DLANST returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a real symmetric tridiagonal matrix.
subroutine dstev(JOBZ, N, D, E, Z, LDZ, WORK, INFO)
DSTEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
double precision function dlamch(CMACH)
DLAMCH