164 SUBROUTINE slasd8( ICOMPQ, K, D, Z, VF, VL, DIFL, DIFR, LDDIFR,
165 $ DSIGMA, WORK, INFO )
172 INTEGER , INFO, K, LDDIFR
175 REAL D( * ), DIFL( * ), DIFR( , * ),
176 $ dsigma( * ), vf( * ), vl( * ), work( * ),
184 parameter( one = 1.0e+0 )
187 INTEGER , IWK1, , IWK2I, IWK3, IWK3I, J
188 REAL DIFLJ, DIFRJ, , DSIGJ, DSIGJP, RHO, TEMP
198 INTRINSIC abs, sign, sqrt
206 IF( ( icompq.LT.0 ) .OR. ( icompq.GT.1 ) )
THEN
208 ELSE IF( k.LT.1 )
THEN
210 ELSE IF( lddifr.LT.k )
THEN
214 CALL xerbla(
'SLASD8', -info )
221 d( 1 ) = abs( z( 1 ) )
248 dsigma( i ) =
slamc3( dsigma( i ), dsigma( i ) ) - dsigma( i )
261 rho = snrm2( k, z, 1 )
262 CALL slascl(
'G', 0, 0, rho, one, k, 1, z, k, info )
267 CALL slaset(
'A', k, 1, one, one, work( iwk3 ), k )
273 CALL slasd4( k, j, dsigma, z, work( iwk1 ), rho, d( j ),
274 $ work( iwk2 ), info )
281 work( iwk3i+j ) = work( iwk3i+j )*work( j )*work( iwk2i+j )
282 difl( j ) = -work( j )
283 difr( j, 1 ) = -work( j+1 )
285 work( iwk3i+i ) = work( iwk3i+i )*work( i )*
286 $ work( iwk2i+i ) / ( dsigma( i )-
287 $ dsigma( j ) ) / ( dsigma( i )+
291 work( iwk3i+i ) = work( iwk3i+i )*work( i )*
292 $ work( iwk2i+i ) / ( dsigma( i )-
293 $ dsigma( j ) ) / ( dsigma( i )+
301 z( i ) = sign( sqrt( abs( work( iwk3i+i ) ) ), z( i ) )
311 difrj = -difr( j, 1 )
312 dsigjp = -dsigma( j+1 )
314 work( j ) = -z( j ) / diflj / ( dsigma( j )+dj )
316 work( i ) = z( i ) / (
slamc3( dsigma( i ), dsigj )-diflj )
317 $ / ( dsigma( i )+dj )
320 work( i ) = z( i ) / (
slamc3( dsigma( i ), dsigjp )+difrj )
321 $ / ( dsigma( i )+dj )
323 temp = snrm2( k, work, 1 )
324 work( iwk2i+j ) =
sdot( k, work, 1, vf, 1 ) / temp
325 work( iwk3i+j ) =
sdot( k, work, 1, vl, 1 ) / temp
326 IF( icompq.EQ.1 )
THEN
331 CALL scopy( k, work( iwk2 ), 1, vf, 1 )
subroutine slasd4(n, i, d, z, delta, rho, sigma, work, info)
SLASD4 computes the square root of the i-th updated eigenvalue of a positive symmetric rank-one modif...
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine slasd8(icompq, k, d, z, vf, vl, difl, difr, lddifr, dsigma, work, info)
SLASD8 finds the square roots of the roots of the secular equation, and stores, for each element in D...
subroutine slascl(type, kl, ku, cfrom, cto, m, n, a, lda, info)
SLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.