-
template<typename T>
void getsls(char *trans, integer *m, integer *n, integer *nrhs, T *a, integer *lda, T *b, integer *ldb, T *work, integer *lwork, integer *info)# GETSLS solves overdetermined or underdetermined real linear systems.
Purpose:
GETSLS solves overdetermined or underdetermined real linear systems involving an M-by-N matrix A, using a tall skinny QR or short wide 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 = 'T' and m >= n: find the minimum norm solution of an undetermined system A**T * X = B. 4. If TRANS = 'T' and m < n: find the least squares solution 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.
- Parameters:
TRANS – [in]
TRANS is CHARACTER*1
= ‘N’: the linear system involves A;
= ‘T’: the linear system involves A**T.M – [in]
M is INTEGER
The number of rows of the matrix A. M >= 0.
N – [in]
N is INTEGER
The number of columns of the matrix A. N >= 0.
NRHS – [in]
NRHS is INTEGER
The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >=0.
A – [inout]
A is REAL array, dimension (LDA,N)
On entry, the M-by-N matrix A.
On exit, A is overwritten by details of its QR or LQ factorization as returned by SGEQR or SGELQ.LDA – [in]
LDA is INTEGER
The leading dimension of the array A. LDA >= fla_max(1,M).
B – [inout]
B is 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, if INFO = 0, 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.
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.LDB – [in]
LDB is INTEGER
The leading dimension of the array B. LDB >= MAX(1,M,N).
WORK – [out]
(workspace) COMPLEX array, dimension (MAX(1,LWORK))
On exit, if INFO = 0, WORK(1) contains optimal (or either minimal or optimal, if query was assumed) LWORK. See LWORK for details.
LWORK – [in]
LWORK is INTEGER
The dimension of the array WORK.
If LWORK = -1 or -2, then a workspace query is assumed.
If LWORK = -1, the routine calculates optimal size of WORK for the optimal performance and returns this value in WORK(1).
If LWORK = -2, the routine calculates minimal size of WORK and returns this value in WORK(1).INFO – [out]
INFO is INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = i, the i-th diagonal element of the triangular factor of A is zero, so that A does not have full rank; the least squares solution could not be computed.