118 DOUBLE PRECISION FUNCTION dqpt01( M, N, K, A, AF, LDA, TAU, JPVT,
126 INTEGER k, lda, lwork, m, n
130 DOUBLE PRECISION ( lda, * ), af( , * ), tau( * ),
137 DOUBLE PRECISION zero, one
138 parameter( zero = 0.0d0, one = 1.0d0 )
142 DOUBLE PRECISION norma
145 DOUBLE PRECISION rwork( 1 )
163 IF( lwork.LT.m*n+n )
THEN
164 CALL xerbla(
'DQPT01', 10 )
170 IF( m.LE.0 .OR. n.LE.0 )
173 norma =
dlange(
'One-norm', m, n, a, lda, rwork )
176 DO 10 i = 1,
min( j, m )
177 work( ( j-1 )*m+i ) = af( i, j )
180 work( ( j-1 )*m+i ) = zero
184 CALL dcopy( m, af( 1, j ), 1, work( ( j-1 )*m+1 ), 1 )
187 CALL dormqr(
'Left',
'No transpose', m, n, k, af, lda, tau, work,
188 $ m, work( m*n+1 ), lwork-m*n, info )
194 CALL daxpy( m, -one, a( 1, jpvt( j ) ), 1, work( ( j-1 )*m+1 ),
199 $ ( dble(
max( m, n ) )*
dlamch(
'Epsilon' ) )
double precision function dlange(norm, m, n, a, lda, work)
DLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
subroutine dormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
DORMQR
double precision function dqpt01(m, n, k, a, af, lda, tau, jpvt, work, lwork)
DQPT01