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 matrixA.M >= 0πNβN is INTEGER. The number of columns of the matricesAandB.N >= 0πΈPβP is INTEGER. The number of rows of the matrixB.0 <= P <= N <= M+Pβ¨AβA is COMPLEX array, dimension (LDA,N). On entry, it's theM-by-NmatrixA. On exit, the elements on and above the diagonal contain themin(M,N)-by-Nupper trapezoidal matrixTπLDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,M)πBβB is COMPLEX array, dimension (LDB,N). On entry, it's theP-by-NmatrixB. On exit, the upper triangle of the subarrayB(1:P,N-P+1:N)contains theP-by-Pupper triangular matrixRπ¦LDBβLDB is INTEGER. The leading dimension of the arrayB.LDB >= max(1,P)πΊCβC is COMPLEX array, dimension (M). On entry,Cholds 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 elementsN-P+1toMof vectorCπDβD is COMPLEX array, dimension (P). On entry,Dholds the right hand side vector for the constrained equation. On exit,Dis destroyed π (rip)XβX is COMPLEX array, dimension (N). On exit,Xis the solution of the LSE problem πβ¨WORKβWORK is COMPLEX array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORKβLWORKβLWORK is INTEGER. The dimension of the arrayWORK.LWORK >= max(1,M+N+P). For optimum performanceLWORK >= P+min(M,N)+max(M,N)*NB, whereNBis an upper bound for the optimal blocksizes forCGEQRF,CGERQF,CUNMQRandCUNMRQπ₯
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: ifINFO = -i, thei-th argument had an illegal value π= 1: the upper triangular factorRassociated withBin the generalized RQ factorization of the pair(B, A)is exactly singular, so thatrank(B) < P; the least squares solution could not be computed π= 2: the(N-P)by(N-P)part of the upper trapezoidal factorTassociated withAin the generalized RQ factorization of the pair(B, A)is exactly singular, so thatrank( (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.
π Author (footer energy) π
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
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms