minfit.f
SUBROUTINE MINFIT (NM, M, N, A, W, IP, B, IERR, RV1)
C***BEGIN PROLOGUE MINFIT
C***PURPOSE Compute the singular value decomposition of a rectangular
C matrix and solve the related linear least squares problem.
C***LIBRARY SLATEC (EISPACK)
C***CATEGORY D9
C***TYPE SINGLE PRECISION (MINFIT-S)
C***KEYWORDS EIGENVALUES, EIGENVECTORS, EISPACK
C***AUTHOR Smith, B. T., et al.
C***DESCRIPTION
C
C This subroutine is a translation of the ALGOL procedure MINFIT,
C NUM. MATH. 14, 403-420(1970) by Golub and Reinsch.
C HANDBOOK FOR AUTO. COMP., VOL II-LINEAR ALGEBRA, 134-151(1971).
C
C This subroutine determines, towards the solution of the linear
C T
C system AX=B, the singular value decomposition A=USV of a real
C T
C M by N rectangular matrix, forming U B rather than U. Householder
C bidiagonalization and a variant of the QR algorithm are used.
C
C On INPUT
C
C NM must be set to the row dimension of the two-dimensional
C array parameters, A and B, as declared in the calling
C program dimension statement. Note that NM must be at least
C as large as the maximum of M and N. NM is an INTEGER
C variable.
C
C M is the number of rows of A and B. M is an INTEGER variable.
C
C N is the number of columns of A and the order of V. N is an
C INTEGER variable.
C
C A contains the rectangular coefficient matrix of the system.
C A is a two-dimensional REAL array, dimensioned A(NM,N).
C
C IP is the number of columns of B. IP can be zero.
C
C B contains the constant column matrix of the system if IP is
C not zero. Otherwise, B is not referenced. B is a two-
C dimensional REAL array, dimensioned B(NM,IP).
C
C On OUTPUT
C
C A has been overwritten by the matrix V (orthogonal) of the
C decomposition in its first N rows and columns. If an
C error exit is made, the columns of V corresponding to
C indices of correct singular values should be correct.
C
C W contains the N (non-negative) singular values of A (the
C diagonal elements of S). They are unordered. If an
C error exit is made, the singular values should be correct
C for indices IERR+1, IERR+2, ..., N. W is a one-dimensional
C REAL array, dimensioned W(N).
C
C T
C B has been overwritten by U B. If an error exit is made,
C T
C the rows of U B corresponding to indices of correct singular
C values should be correct.
C
C IERR is an INTEGER flag set to
C Zero for normal return,
C K if the K-th singular value has not been
C determined after 30 iterations.
C The singular values should be correct for
C indices IERR+1, IERR+2, ..., N.
C
C RV1 is a one-dimensional REAL array used for temporary storage,
C dimensioned RV1(N).
C
C Calls PYTHAG(A,B) for sqrt(A**2 + B**2).
C
C Questions and comments should be directed to B. S. Garbow,
C APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY
C ------------------------------------------------------------------
C
C***REFERENCES B. T. Smith, J. M. Boyle, J. J. Dongarra, B. S. Garbow,
C Y. Ikebe, V. C. Klema and C. B. Moler, Matrix Eigen-
C system Routines - EISPACK Guide, Springer-Verlag,
C 1976.
C***ROUTINES CALLED PYTHAG
C***REVISION HISTORY (YYMMDD)
C 760101 DATE WRITTEN
C 890531 Changed all specific intrinsics to generic. (WRB)
C 890831 Modified array declarations. (WRB)
C 890831 REVISION DATE from Version 3.2
C 891214 Prologue converted to Version 4.0 format. (BAB)
C 920501 Reformatted the REFERENCES section. (WRB)
C***END PROLOGUE MINFIT