117 REAL D( * ), E( * ), WORK( * )
124 parameter( zero = 0.0e0 )
128 REAL EPS, SCALE, SAFMIN, SIGMN, SIGMX
138 INTRINSIC abs, max, sqrt
145 CALL xerbla(
'SLASQ1', -info )
147 ELSE IF( n.EQ.0 )
THEN
149 ELSE IF( n.EQ.1 )
THEN
150 d( 1 ) = abs( d( 1 ) )
152 ELSE IF( n.EQ.2 )
THEN
153 CALL slas2( d( 1 ), e( 1 ), d( 2 ), sigmn, sigmx )
163 d( i ) = abs( d( i ) )
164 sigmx = max( sigmx, abs( e( i ) ) )
166 d( n ) = abs( d( n ) )
170 IF( sigmx.EQ.zero )
THEN
171 CALL slasrt(
'D', n, d, iinfo )
176 sigmx = max( sigmx, d( i ) )
182 eps = slamch(
'Precision' )
183 safmin = slamch(
'Safe minimum' )
184 scale = sqrt( eps / safmin )
185 CALL scopy( n, d, 1, work( 1 ), 2 )
186 CALL scopy( n-1, e, 1, work( 2 ), 2 )
187 CALL slascl(
'G', 0, 0, sigmx, scale, 2*n-1, 1, work, 2*n-1,
193 work( i ) = work( i )**2
197 CALL slasq2( n, work, info )
201 d( i ) = sqrt( work( i ) )
203 CALL slascl(
'G', 0, 0, scale, sigmx, n, 1, d, n, iinfo )
204 ELSE IF( info.EQ.2 )
THEN
210 d( i ) = sqrt( work( 2*i-1 ) )
211 e( i ) = sqrt( work( 2*i ) )
213 CALL slascl(
'G', 0, 0, scale, sigmx, n, 1, d, n, iinfo )
214 CALL slascl(
'G', 0, 0, scale, sigmx, n, 1, e, n, iinfo )
subroutine xerbla(srname, info)
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine slas2(f, g, h, ssmin, ssmax)
SLAS2 computes singular values of a 2-by-2 triangular matrix.
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.
subroutine slasq1(n, d, e, work, info)
SLASQ1 computes the singular values of a real square bidiagonal matrix. Used by sbdsqr.
subroutine slasq2(n, z, info)
SLASQ2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated ...
subroutine slasrt(id, n, d, info)
SLASRT sorts numbers in increasing or decreasing order.