cgels(3F)

CGELS - solve overdetermined or underdetermined complex linear systems involving an M-by-N matrix A, or its conjugate-transpose, using a QR or LQ factorization of A

Showing IRIX 6.5.30 (default release). Unchanged since IRIX 6.5.

NAME
     CGELS - solve overdetermined or underdetermined complex linear systems
     involving an M-by-N matrix A, or its conjugate-transpose, using a QR or
     LQ factorization of A

SYNOPSIS
     SUBROUTINE CGELS( TRANS, M, N, NRHS, A, LDA, B, LDB, WORK, LWORK, INFO )

         CHARACTER     TRANS

         INTEGER       INFO, LDA, LDB, LWORK, M, N, NRHS

         COMPLEX       A( LDA, * ), B( LDB, * ), WORK( LWORK )

PURPOSE
     CGELS solves overdetermined or underdetermined complex linear systems
     involving an M-by-N matrix A, or its conjugate-transpose, using a QR or
     LQ factorization of A.  It is assumed that A has full rank.

     The following options are provided:

     1. If TRANS = 'N' and m >= n:  find the least squares solution of
        an overdetermined system, i.e., solve the least squares problem
                     minimize || B - A*X ||.

     2. If TRANS = 'N' and m < n:  find the minimum norm solution of
        an underdetermined system A * X = B.

     3. If TRANS = 'C' and m >= n:  find the minimum norm solution of
        an undetermined system A**H * X = B.

     4. If TRANS = 'C' and m < n:  find the least squares solution of
        an overdetermined system, i.e., solve the least squares problem
                     minimize || B - A**H * X ||.

     Several right hand side vectors b and solution vectors x can be handled
     in a single call; they are stored as the columns of the M-by-NRHS right
     hand side matrix B and the N-by-NRHS solution matrix X.


ARGUMENTS
     TRANS   (input) CHARACTER
             = 'N': the linear system involves A;
             = 'C': the linear system involves A**H.

     M       (input) INTEGER
             The number of rows of the matrix A.  M >= 0.

     N       (input) INTEGER
             The number of columns of the matrix A.  N >= 0.
     NRHS    (input) INTEGER
             The number of right hand sides, i.e., the number of columns of
             the matrices B and X. NRHS >= 0.

     A       (input/output) COMPLEX array, dimension (LDA,N)
             On entry, the M-by-N matrix A.  if M >= N, A is overwritten by
             details of its QR factorization as returned by CGEQRF; if M <  N,
             A is overwritten by details of its LQ factorization as returned
             by CGELQF.

     LDA     (input) INTEGER
             The leading dimension of the array A.  LDA >= max(1,M).

     B       (input/output) COMPLEX array, dimension (LDB,NRHS)
             On entry, the matrix B of right hand side vectors, stored
             columnwise; B is M-by-NRHS if TRANS = 'N', or N-by-NRHS if TRANS
             = 'C'.  On exit, B is overwritten by the solution vectors, stored
             columnwise:  if TRANS = 'N' and m >= n, rows 1 to n of B contain
             the least squares solution vectors; the residual sum of squares
             for the solution in each column is given by the sum of squares of
             elements N+1 to M in that column; if TRANS = 'N' and m < n, rows
             1 to N of B contain the minimum norm solution vectors; if TRANS =
             'C' and m >= n, rows 1 to M of B contain the minimum norm
             solution vectors; if TRANS = 'C' and m < n, rows 1 to M of B
             contain the least squares solution vectors; the residual sum of
             squares for the solution in each column is given by the sum of
             squares of elements M+1 to N in that column.

     LDB     (input) INTEGER
             The leading dimension of the array B. LDB >= MAX(1,M,N).

     WORK    (workspace/output) COMPLEX array, dimension (LWORK)
             On exit, if INFO = 0, WORK(1) returns the optimal LWORK.

     LWORK   (input) INTEGER
             The dimension of the array WORK.  LWORK >= min(M,N) +
             MAX(1,M,N,NRHS).  For optimal performance, LWORK >= min(M,N) +
             MAX(1,M,N,NRHS) * NB where NB is the optimum block size.

     INFO    (output) INTEGER
             = 0:  successful exit
             < 0:  if INFO = -i, the i-th argument had an illegal value