118 DOUBLE PRECISION FUNCTION dqpt01( M, N, K, A, AF, LDA, TAU, JPVT,
126 INTEGER k, lda, lwork, m, n
130 DOUBLE PRECISION a( lda, * ), af( lda, * ), tau( * ),
137 DOUBLE PRECISION zero, one
138 parameter( zero = 0.0d0, one = 1.0d0 )
142 DOUBLE PRECISION norma
145 DOUBLE PRECISION rwork( 1 )
155 INTRINSIC dble, max, min
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 dlamch(CMACH)
DLAMCH
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dcopy(N, DX, INCX, DY, INCY)
DCOPY
subroutine daxpy(N, DA, DX, INCX, DY, INCY)
DAXPY
double precision function dqpt01(M, N, K, A, AF, LDA, TAU, JPVT, WORK, LWORK)
DQPT01
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