141 SUBROUTINE sgeqpf( M, N, A, LDA, JPVT, TAU, WORK, INFO )
148 INTEGER INFO, LDA, M, N
152 REAL A( LDA, * ), TAU( * ), WORK( * )
159 parameter( zero = 0.0e+0, one = 1.0e+0 )
162 INTEGER I, ITEMP, J, MA, MN, PVT
163 REAL AII, TEMP, TEMP2, TOL3Z
169 INTRINSIC abs, max, min, sqrt
174 EXTERNAL isamax, slamch, snrm2
183 ELSE IF( n.LT.0 )
THEN
185 ELSE IF( lda.LT.max( 1, m ) )
THEN
189 CALL xerbla(
'SGEQPF', -info )
194 tol3z = sqrt(slamch(
'Epsilon'))
200 IF( jpvt( i ).NE.0 )
THEN
201 IF( i.NE.itemp )
THEN
202 CALL sswap( m, a( 1, i ), 1, a( 1, itemp ), 1 )
203 jpvt( i ) = jpvt( itemp )
217 IF( itemp.GT.0 )
THEN
219 CALL sgeqr2( m, ma, a, lda, tau, work, info )
221 CALL sorm2r(
'Left',
'Transpose', m, n-ma, ma, a, lda, tau,
222 $ a( 1, ma+1 ), lda, work, info )
226 IF( itemp.LT.mn )
THEN
231 DO 20 i = itemp + 1, n
232 work( i ) = snrm2( m-itemp, a( itemp+1, i ), 1 )
233 work( n+i ) = work( i )
238 DO 40 i = itemp + 1, mn
242 pvt = ( i-1 ) + isamax( n-i+1, work( i ), 1 )
245 CALL sswap( m, a( 1, pvt ), 1, a( 1, i ), 1 )
247 jpvt( pvt ) = jpvt( i )
249 work( pvt ) = work( i )
250 work( n+pvt ) = work( n+i )
256 CALL slarfg( m-i+1, a( i, i ), a( i+1, i ), 1, tau( i ) )
258 CALL slarfg( 1, a( m, m ), a( m, m ), 1, tau( m ) )
267 CALL slarf(
'LEFT', m-i+1, n-i, a( i, i ), 1, tau( i ),
268 $ a( i, i+1 ), lda, work( 2*n+1 ) )
275 IF( work( j ).NE.zero )
THEN
280 temp = abs( a( i, j ) ) / work( j )
281 temp = max( zero, ( one+temp )*( one-temp ) )
282 temp2 = temp*( work( j ) / work( n+j ) )**2
283 IF( temp2 .LE. tol3z )
THEN
285 work( j ) = snrm2( m-i, a( i+1, j ), 1 )
286 work( n+j ) = work( j )
292 work( j ) = work( j )*sqrt( temp )
subroutine xerbla(srname, info)
subroutine sgeqr2(m, n, a, lda, tau, work, info)
SGEQR2 computes the QR factorization of a general rectangular matrix using an unblocked algorithm.
subroutine slarf(side, m, n, v, incv, tau, c, ldc, work)
SLARF applies an elementary reflector to a general rectangular matrix.
subroutine slarfg(n, alpha, x, incx, tau)
SLARFG generates an elementary reflector (Householder matrix).
subroutine sswap(n, sx, incx, sy, incy)
SSWAP
subroutine sorm2r(side, trans, m, n, k, a, lda, tau, c, ldc, work, info)
SORM2R multiplies a general matrix by the orthogonal matrix from a QR factorization determined by sge...
subroutine sgeqpf(m, n, a, lda, jpvt, tau, work, info)
SGEQPF