174 SUBROUTINE dsytd2( UPLO, N, A, LDA, D, E, TAU, INFO )
186 DOUBLE PRECISION A( lda, * ), D( * ), E( * ), TAU( * )
192 DOUBLE PRECISION ONE, ZERO, HALF
193 parameter ( one = 1.0d0, zero = 0.0d0,
194 $ half = 1.0d0 / 2.0d0 )
199 DOUBLE PRECISION ALPHA, TAUI
206 DOUBLE PRECISION DDOT
217 upper = lsame( uplo,
'U' )
218 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
220 ELSE IF( n.LT.0 )
THEN
222 ELSE IF( lda.LT.max( 1, n ) )
THEN
226 CALL xerbla(
'DSYTD2', -info )
239 DO 10 i = n - 1, 1, -1
244 CALL dlarfg( i, a( i, i+1 ), a( 1, i+1 ), 1, taui )
247 IF( taui.NE.zero )
THEN
255 CALL dsymv( uplo, i, taui, a, lda, a( 1, i+1 ), 1, zero,
260 alpha = -half*taui*ddot( i, tau, 1, a( 1, i+1 ), 1 )
261 CALL daxpy( i, alpha, a( 1, i+1 ), 1, tau, 1 )
266 CALL dsyr2( uplo, i, -one, a( 1, i+1 ), 1, tau, 1, a,
271 d( i+1 ) = a( i+1, i+1 )
284 CALL dlarfg( n-i, a( i+1, i ), a( min( i+2, n ), i ), 1,
288 IF( taui.NE.zero )
THEN
296 CALL dsymv( uplo, n-i, taui, a( i+1, i+1 ), lda,
297 $ a( i+1, i ), 1, zero, tau( i ), 1 )
301 alpha = -half*taui*ddot( n-i, tau( i ), 1, a( i+1, i ),
303 CALL daxpy( n-i, alpha, a( i+1, i ), 1, tau( i ), 1 )
308 CALL dsyr2( uplo, n-i, -one, a( i+1, i ), 1, tau( i ), 1,
309 $ a( i+1, i+1 ), lda )
subroutine daxpy(N, DA, DX, INCX, DY, INCY)
DAXPY
subroutine dsytd2(UPLO, N, A, LDA, D, E, TAU, INFO)
DSYTD2 reduces a symmetric matrix to real symmetric tridiagonal form by an orthogonal similarity tran...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dlarfg(N, ALPHA, X, INCX, TAU)
DLARFG generates an elementary reflector (Householder matrix).
subroutine dsyr2(UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA)
DSYR2
subroutine dsymv(UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
DSYMV