SGELS - solve overdetermined or underdetermined real lin
ear systems involving an M-by-N matrix A, or its trans
pose, 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( * )
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
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 solu
tion 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.
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 factor
ization 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 over
written by the solution vectors, stored column
wise: 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/output) 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 >= max( 1,
MN + max( MN, NRHS ) ). For optimal performance,
LWORK >= max( 1, MN + max( MN, NRHS )*NB ). where
MN = min(M,N) and NB is the optimum block size.
If LWORK = -1, then a workspace query is assumed;
the routine only calculates the optimal size of
the WORK array, returns this value as the first
related to LWORK is issued by XERBLA.
INFO (output) INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an ille
gal value
Man(1) output converted with
man2html