115 SUBROUTINE dstev( JOBZ, N, D, E, Z, LDZ, WORK, INFO )
126 DOUBLE PRECISION D( * ), E( * ), WORK( * ), Z( LDZ, * )
132 DOUBLE PRECISION ZERO, ONE
133 parameter( zero = 0.0d0, one = 1.0d0 )
138 DOUBLE PRECISION BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
143 DOUBLE PRECISION DLAMCH, DLANST
144 EXTERNAL lsame, dlamch, dlanst
156 wantz = lsame( jobz,
'V' )
159 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
161 ELSE IF( n.LT.0 )
THEN
163 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
168 CALL xerbla(
'DSTEV ', -info )
185 safmin = dlamch(
'Safe minimum' )
186 eps = dlamch(
'Precision' )
187 smlnum = safmin / eps
188 bignum = one / smlnum
189 rmin = sqrt( smlnum )
190 rmax = sqrt( bignum )
195 tnrm = dlanst(
'M', n, d, e )
196 IF( tnrm.GT.zero .AND. tnrm.LT.rmin )
THEN
199 ELSE IF( tnrm.GT.rmax )
THEN
203 IF( iscale.EQ.1 )
THEN
204 CALL dscal( n, sigma, d, 1 )
205 CALL dscal( n-1, sigma, e( 1 ), 1 )
211 IF( .NOT.wantz )
THEN
212 CALL dsterf( n, d, e, info )
214 CALL dsteqr(
'I', n, d, e, z, ldz, work, info )
219 IF( iscale.EQ.1 )
THEN
225 CALL dscal( imax, one / sigma, d, 1 )
subroutine xerbla(srname, info)
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine dsteqr(compz, n, d, e, z, ldz, work, info)
DSTEQR
subroutine dsterf(n, d, e, info)
DSTERF
subroutine dstev(jobz, n, d, e, z, ldz, work, info)
DSTEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices