113 SUBROUTINE dstev( JOBZ, N, D, E, Z, LDZ, WORK, INFO )
124 DOUBLE PRECISION D( * ), E( * ), WORK( * ), Z( LDZ, * )
130 DOUBLE PRECISION ZERO, ONE
131 parameter( zero = 0.0d0, one = 1.0d0 )
136 DOUBLE PRECISION BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
141 DOUBLE PRECISION DLAMCH, DLANST
142 EXTERNAL lsame, dlamch, dlanst
154 wantz = lsame( jobz,
'V' )
157 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
159 ELSE IF( n.LT.0 )
THEN
161 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
166 CALL xerbla(
'DSTEV ', -info )
183 safmin = dlamch(
'Safe minimum' )
184 eps = dlamch(
'Precision' )
185 smlnum = safmin / eps
186 bignum = one / smlnum
187 rmin = sqrt( smlnum )
188 rmax = sqrt( bignum )
193 tnrm = dlanst(
'M', n, d, e )
194 IF( tnrm.GT.zero .AND. tnrm.LT.rmin )
THEN
197 ELSE IF( tnrm.GT.rmax )
THEN
201 IF( iscale.EQ.1 )
THEN
202 CALL dscal( n, sigma, d, 1 )
203 CALL dscal( n-1, sigma, e( 1 ), 1 )
209 IF( .NOT.wantz )
THEN
210 CALL dsterf( n, d, e, info )
212 CALL dsteqr(
'I', n, d, e, z, ldz, work, info )
217 IF( iscale.EQ.1 )
THEN
223 CALL dscal( imax, one / sigma, d, 1 )
subroutine dsteqr(compz, n, d, e, z, ldz, work, info)
DSTEQR
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