SRC/cgglse.f(3)

πŸ’… cgglse.f β€” CGGLSE solves overdetermined or underdetermined systems for OTHER matrices ✨

Okay bestie, so this is a LAPACK library function page β€” it's from Library Functions Manual and it's literally all about one iconic little subroutine. Buckle up πŸŽ€


🌸 SYNOPSIS 🌸

Function/Subroutine Documentation

subroutine cgglse (m, n, p, a, lda, b, ldb, c, d, x, work, lwork, info)
CGGLSE solves overdetermined or underdetermined systems for OTHER matrices

πŸ‘‘ DESCRIPTION πŸ‘‘

Function/Subroutine Documentation

subroutine cgglse (integer m, integer n, integer p, complex, dimension( lda,
* ) a, integer lda, complex, dimension( ldb, * ) b, integer ldb,
complex, dimension( * ) c, complex, dimension( * ) d, complex,
dimension( * ) x, complex, dimension( * ) work, integer lwork, integer
info)

CGGLSE solves overdetermined or underdetermined systems for OTHER matrices ✨


πŸ’– Purpose πŸ’–

Okay so picture this, bestie β€” here's the literal quote from the source:

!>
!> CGGLSE solves the linear equality-constrained least squares (LSE)
!> problem:
!>
!>         minimize || c - A*x ||_2   subject to   B*x = d
!>
!> where A is an M-by-N matrix, B is a P-by-N matrix, c is a given
!> M-vector, and d is a given P-vector. It is assumed that
!> P <= N <= M+P, and
!>
!>          rank(B) = P and  rank( (A) ) = N.
!>                               ( (B) )
!>
!> These conditions ensure that the LSE problem has a unique solution,
!> which is obtained using a generalized RQ factorization of the
!> matrices (B, A) given by
!>
!>    B = (0 R)*Q,   A = Z*T*Q.
!>
!> Callers of this subroutine should note that the singularity/rank-deficiency checks
!> implemented in this subroutine are rudimentary. The CTRTRS subroutine called by this
!> subroutine only signals a failure due to singularity if the problem is exactly singular.
!>
!> It is conceivable for one (or more) of the factors involved in the generalized RQ
!> factorization of the pair (B, A) to be subnormally close to singularity without this
!> subroutine signalling an error. The solutions computed for such almost-rank-deficient
!> problems may be less accurate due to a loss of numerical precision.
!>
!>

So basically you're minimizing the 2-norm of c - A*x while ALSO forcing B*x = d to hold β€” it's giving ✨constrained optimization main character energy✨. The assumptions are P <= N <= M+P, plus rank(B) = P and that stacked rank condition rank( (A) ) = N over ( (B) ) β€” those guarantee a unique solution 🫢. It all comes from a generalized RQ factorization of (B, A) where B = (0 R)*Q and A = Z*T*Q.

⚠️ Real talk: the singularity/rank-deficiency checks in here are rudimentary, no cap. The CTRTRS subroutine only flags a failure when the problem is exactly singular. So a factor can be subnormally close to singular and this routine won't say a word 😭 β€” and the solution can lose numerical precision on those almost-rank-deficient problems. Be aware, bestie πŸ’€

✨ PARAMETERS ✨

Okay, here come the arguments β€” all of them, let's go πŸ’…

  • M β€” M is INTEGER. The number of rows of the matrix A. M >= 0 πŸ‘‘
  • N β€” N is INTEGER. The number of columns of the matrices A and B. N >= 0 🌸
  • P β€” P is INTEGER. The number of rows of the matrix B. 0 <= P <= N <= M+P ✨
  • A β€” A is COMPLEX array, dimension (LDA,N). On entry, it's the M-by-N matrix A. On exit, the elements on and above the diagonal contain the min(M,N)-by-N upper trapezoidal matrix T πŸ’–
  • LDA β€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M) πŸŽ€
  • B β€” B is COMPLEX array, dimension (LDB,N). On entry, it's the P-by-N matrix B. On exit, the upper triangle of the subarray B(1:P,N-P+1:N) contains the P-by-P upper triangular matrix R πŸ¦‹
  • LDB β€” LDB is INTEGER. The leading dimension of the array B. LDB >= max(1,P) 🌺
  • C β€” C is COMPLEX array, dimension (M). On entry, C holds the right hand side vector for the least squares part of the LSE problem. On exit, the residual sum of squares for the solution is given by the sum of squares of elements N-P+1 to M of vector C πŸ’œ
  • D β€” D is COMPLEX array, dimension (P). On entry, D holds the right hand side vector for the constrained equation. On exit, D is destroyed πŸ’€ (rip)
  • X β€” X is COMPLEX array, dimension (N). On exit, X is the solution of the LSE problem πŸ‘‘βœ¨
  • WORK β€” WORK is COMPLEX array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK ⭐
  • LWORK β€” LWORK is INTEGER. The dimension of the array WORK. LWORK >= max(1,M+N+P). For optimum performance LWORK >= P+min(M,N)+max(M,N)*NB, where NB is an upper bound for the optimal blocksizes for CGEQRF, CGERQF, CUNMQR and CUNMRQ πŸ”₯

Also: 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 entry of the WORK array, and no error message related to LWORK is issued by XERBLA. Iconic behavior tbh 🧚

  • INFO β€” INFO is INTEGER:
    • = 0: successful exit πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value πŸ™ˆ
    • = 1: the upper triangular factor R associated with B in the generalized RQ factorization of the pair (B, A) is exactly singular, so that rank(B) < P; the least squares solution could not be computed 😭
    • = 2: the (N-P) by (N-P) part of the upper trapezoidal factor T associated with A in the generalized RQ factorization of the pair (B, A) is exactly singular, so that rank( (A) ) < N; the least squares solution could not be computed πŸ’€

(and yes, that rank thing is that stacked (A) over (B) notation, exactly like the purpose section β€” it's giving matrix sandwich πŸ₯ͺ)


🧚 Author 🧚

The legends behind this:

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

πŸ“ Definition at line 188 of file cgglse.f.


Generated automatically by Doxygen for LAPACK from the source code. Slay πŸ’…

And that's the whole page, bestie β€” you ate that 🫢✨

LAPACK β€” Version 3.12.0 β€” SRC/cgglse.f(3) πŸŽ€ bye bestie, go solve those constrained least squares problems fr fr πŸ’–

πŸ“¦ where this page comes from