DQRSL(3F)

DQRSL - DQRSL applies the output of DQRDC to compute coordinate transformations, projections, and least squares solutions. For K .LE. MIN(N,P), let XK be the matrix

As shipped in IRIX 6.5. First release of IRIX 6.5.

NAME
     DQRSL   - DQRSL applies the output of DQRDC to compute coordinate
     transformations, projections, and least squares solutions.  For K .LE.
     MIN(N,P), let XK be the matrix

        XK = (X(JPVT(1)),X(JPVT(2)), ... ,X(JPVT(K)))

     formed from columnns JPVT(1), ... ,JPVT(K) of the original N X P matrix X
     that was input to DQRDC (if no pivoting was done, XK consists of the
     first K columns of X in their original order).  DQRDC produces a factored
     orthogonal matrix Q and an upper triangular matrix R such that

        XK = Q * (R)
        (0)

     This information is contained in coded form in the arrays X and QRAUX.


SYNOPSYS
      SUBROUTINE DQRSL(X,LDX,N,K,QRAUX,Y,QY,QTY,B,RSD,XB,JOB,INFO)

DESCRIPTION
     On Entry

     X DOUBLE PRECISION(LDX,P).
        X contains the output of DQRDC.

     LDX INTEGER.
        LDX is the leading dimension of the array X.

     N INTEGER.
        N is the number of rows of the matrix XK.  It must
        have the same value as N in DQRDC.

     K INTEGER.
        K is the number of columns of the matrix XK.  K
        must not be greater than MIN(N,P), where P is the
        same as in the calling sequence to DQRDC.

     QRAUX DOUBLE PRECISION(P).
        QRAUX contains the auxiliary output from DQRDC.

     Y DOUBLE PRECISION(N)
        Y contains an N-vector that is to be manipulated
        by DQRSL.

     JOB INTEGER.
        JOB specifies what is to be computed.  JOB has
        the decimal expansion ABCDE, with the following
        meaning.
        If A .NE. 0, compute QY.
        If B,C,D, or E .NE. 0, compute QTY.
        If C .NE. 0, compute B.
        If D .NE. 0, compute RSD.
        If E .NE. 0, compute XB.
        Note that a request to compute B, RSD, or XB
        automatically triggers the computation of QTY, for
        which an array must be provided in the calling
        sequence.  On Return

     QY DOUBLE PRECISION(N).
        QY contains Q*Y, if its computation has been
        requested.

     QTY DOUBLE PRECISION(N).
        QTY contains TRANS(Q)*Y, if its computation has
        been requested.  Here TRANS(Q) is the
        transpose of the matrix Q.

     B DOUBLE PRECISION(K)
        B contains the solution of the least squares problem
        minimize norm2(Y - XK*B),
        if its computation has been requested.  (Note that
        if pivoting was requested in DQRDC, the J-th
        component of B will be associated with column JPVT(J)
        of the original matrix X that was input into DQRDC.)

     RSD DOUBLE PRECISION(N).
        RSD contains the least squares residual Y - XK*B,
        if its computation has been requested.  RSD is
        also the orthogonal projection of Y onto the
        orthogonal complement of the column space of XK.

     XB DOUBLE PRECISION(N).
        XB contains the least squares approximation XK*B,
        if its computation has been requested.  XB is also
        the orthogonal projection of Y onto the column space
        of X.

     INFO INTEGER.
        INFO is zero unless the computation of B has
        been requested and R is exactly singular.  In
        this case, INFO is the index of the first zero
        diagonal element of R and B is left unaltered.  The parameters QY,
     QTY, B, RSD, and XB are not referenced if their computation is not
     requested and in this case can be replaced by dummy variables in the
     calling program.  To save storage, the user may in some cases use the
     same array for different parameters in the calling sequence.  A
     frequently occuring example is when one wishes to compute any of B, RSD,
     or XB and does not need Y or QTY.  In this case one may identify Y, QTY,
     and one of B, RSD, or XB, while providing separate arrays for anything
     else that is to be computed.  Thus the calling sequence CALL
     DQRSL(X,LDX,N,K,QRAUX,Y,DUM,Y,B,Y,DUM,110,INFO) will result in the
     computation of B and RSD, with RSD overwriting Y.  More generally, each
     item in the following list contains groups of permissible identifications
     for a single calling sequence.  1. (Y,QTY,B) (RSD) (XB) (QY) 2.
     (Y,QTY,RSD) (B) (XB) (QY) 3. (Y,QTY,XB) (B) (RSD) (QY) 4. (Y,QY) (QTY,B)
     (RSD) (XB) 5. (Y,QY) (QTY,RSD) (B) (XB) 6. (Y,QY) (QTY,XB) (B) (RSD) In
     any group the value returned in the array allocated to the group
     corresponds to the last member of the group.  LINPACK.  This version
     dated 08/14/78 .  G. W. Stewart, University of Maryland, Argonne National
     Lab.

     DQRSL uses the following functions and subprograms. BLAS DAXPY,DCOPY,DDOT
     Fortran DABS,MIN0,MOD