GETSLS - 5.2 English - 68552

AOCL API Guide (68552)

Document ID
68552
Release Date
2025-12-29
Version
5.2 English
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.