qrfac.f
SUBROUTINE QRFAC (M, N, A, LDA, PIVOT, IPVT, LIPVT, SIGMA, ACNORM,
+ WA)
C***BEGIN PROLOGUE QRFAC
....
....
Warning: this routine is not intended to be user-callable.
....
....
C***SUBSIDIARY
C***PURPOSE Subsidiary to SNLS1, SNLS1E, SNSQ and SNSQE
C***LIBRARY SLATEC
C***TYPE SINGLE PRECISION (QRFAC-S, DQRFAC-D)
C***AUTHOR (UNKNOWN)
C***DESCRIPTION
C
C This subroutine uses Householder transformations with column
C pivoting (optional) to compute a QR factorization of the
C M by N matrix A. That is, QRFAC determines an orthogonal
C matrix Q, a permutation matrix P, and an upper trapezoidal
C matrix R with diagonal elements of nonincreasing magnitude,
C such that A*P = Q*R. The Householder transformation for
C column K, K = 1,2,...,MIN(M,N), is of the form
C
C T
C I - (1/U(K))*U*U
C
C where U has zeros in the first K-1 positions. The form of
C this transformation and the method of pivoting first
C appeared in the corresponding LINPACK subroutine.
C
C The subroutine statement is
C
C SUBROUTINE QRFAC(M,N,A,LDA,PIVOT,IPVT,LIPVT,SIGMA,ACNORM,WA)
C
C where
C
C M is a positive integer input variable set to the number
C of rows of A.
C
C N is a positive integer input variable set to the number
C of columns of A.
C
C A is an M by N array. On input A contains the matrix for
C which the QR factorization is to be computed. On output
C the strict upper trapezoidal part of A contains the strict
C upper trapezoidal part of R, and the lower trapezoidal
C part of A contains a factored form of Q (the non-trivial
C elements of the U vectors described above).
C
C LDA is a positive integer input variable not less than M
C which specifies the leading dimension of the array A.
C
C PIVOT is a logical input variable. If pivot is set .TRUE.,
C then column pivoting is enforced. If pivot is set .FALSE.,
C then no column pivoting is done.
C
C IPVT is an integer output array of length LIPVT. IPVT
C defines the permutation matrix P such that A*P = Q*R.
C Column J of P is column IPVT(J) of the identity matrix.
C If pivot is .FALSE., IPVT is not referenced.
C
C LIPVT is a positive integer input variable. If PIVOT is
C .FALSE., then LIPVT may be as small as 1. If PIVOT is
C .TRUE., then LIPVT must be at least N.
C
C SIGMA is an output array of length N which contains the
C diagonal elements of R.
C
C ACNORM is an output array of length N which contains the
C norms of the corresponding columns of the input matrix A.
C If this information is not needed, then ACNORM can coincide
C with SIGMA.
C
C WA is a work array of length N. If pivot is .FALSE., then WA
C can coincide with SIGMA.
C
C***SEE ALSO SNLS1, SNLS1E, SNSQ, SNSQE
C***ROUTINES CALLED ENORM, R1MACH
C***REVISION HISTORY (YYMMDD)
C 800301 DATE WRITTEN
C 890531 Changed all specific intrinsics to generic. (WRB)
C 890831 Modified array declarations. (WRB)
C 891214 Prologue converted to Version 4.0 format. (BAB)
C 900326 Removed duplicate information from DESCRIPTION section.
C (WRB)
C 900328 Added TYPE section. (WRB)
C***END PROLOGUE QRFAC