Previous: sgelqf Up: ../lapack-s.html Next: sgelss

# sgels

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

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

CHARACTER     TRANS

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

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

PURPOSE
SGELS solves overdetermined or underdetermined real linear
systems involving an M-by-N matrix A, or its 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 solu-
tion 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 = 'T' and m >= n:  find the minimum norm solu-
tion of
an undetermined system A**T * X = B.

4. If TRANS = 'T' and m < n:  find the least squares solu-
tion of
an overdetermined system, i.e., solve the least squares
problem
minimize || B - A**T * 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;

= 'T': the linear system involves A**T.

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) REAL array, dimension (LDA,N)
On entry, the M-by-N matrix A.  On exit, if M >= N,
A is overwritten by details of its QR factorization
as returned by SGEQRF; if M <  N, A is overwritten
by details of its LQ factorization as returned by
SGELQF.

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

B       (input/output) REAL 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 = 'T'. 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
= 'T' and m >= n, rows 1 to M of B contain the
minimum norm solution vectors; if TRANS = 'T' 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) REAL 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
```