gelsd(3)
π gelsd(3) π β least squares using SVD, divide and conquer
From the Library Functions Manual, bestie β this is the gelsd(3) glow-up. We're doing least squares with SVD and divide-and-conquer energy, and yes, it's iconic. β¨
β¨ NAME β¨
gelsd - gelsd: least squares using SVD, divide and conquer
π¦ SYNOPSIS π¦
π§ Functions π§
subroutine cgelsd (m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, rwork, iwork, info)β CGELSD computes the minimum-norm solution to a linear least squares problem for GE matricessubroutine dgelsd (m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, iwork, info)β DGELSD computes the minimum-norm solution to a linear least squares problem for GE matricessubroutine sgelsd (m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, iwork, info)β SGELSD computes the minimum-norm solution to a linear least squares problem for GE matricessubroutine zgelsd (m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, rwork, iwork, info)β ZGELSD computes the minimum-norm solution to a linear least squares problem for GE matrices
π DETAILED DESCRIPTION π
This heading is literally all that's here in part 1 β the original page then jumps straight into Function Documentation. No cap. π¦
π FUNCTION DOCUMENTATION π
π«Ά cgelsd π«Ά
subroutine cgelsd (integer m, integer n, integer nrhs, complex, dimension(
lda, * ) a, integer lda, complex, dimension( ldb, * ) b, integer ldb,
real, dimension( * ) s, real rcond, integer rank, complex, dimension( *
) work, integer lwork, real, dimension( * ) rwork, integer, dimension( *
) iwork, integer info)
CGELSD computes the minimum-norm solution to a linear least squares problem for GE matrices.
π― Purpose π―
CGELSD computes the minimum-norm solution to a real linear least squares problem:
minimize 2-norm(| b - A*x |)
using the singular value decomposition (SVD) of A. A is an M-by-N matrix which may be rank-deficient. π«Ά
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.
The problem is solved in three steps:
(1) Reduce the coefficient matrix A to bidiagonal form with
Householder transformations, reducing the original problem
into a (BLS)
(2) Solve the BLS using a divide and conquer approach.
(3) Apply back all the Householder transformations to solve
the original least squares problem.
The effective rank of A is determined by treating as zero those singular values which are less than RCOND times the largest singular value.
π Parameters π
M β M is INTEGER. It's the number of rows of the matrix A. Constraint: M >= 0.
N β N is INTEGER. It's the number of columns of the matrix A. Constraint: N >= 0.
NRHS β NRHS is INTEGER. The number of right hand sides, i.e., the number of columns of the matrices B and X. Constraint: NRHS >= 0.
A β A is COMPLEX array, dimension (LDA,N). On entry, the M-by-N matrix A. On exit, A has been destroyed. π Yes, gone. That's the vibe.
LDA β LDA is INTEGER. The leading dimension of the array A. Constraint: LDA >= max(1,M).
B β B is COMPLEX array, dimension (LDB,NRHS). On entry, the M-by-NRHS right hand side matrix B. On exit, B is overwritten by the N-by-NRHS solution matrix X. If m >= n and RANK = n, the residual sum-of-squares for the solution in the i-th column is given by the sum of squares of the modulus of elements n+1:m in that column. π
LDB β LDB is INTEGER. The leading dimension of the array B. Constraint: LDB >= max(1,M,N).
S β S is REAL array, dimension (min(M,N)). The singular values of A in decreasing order. The condition number of A in the 2-norm = S(1)/S(min(m,n)).
RCOND β RCOND is REAL. RCOND is used to determine the effective rank of A. Singular values S(i) <= RCOND*S(1) are treated as zero. If RCOND < 0, machine precision is used instead.
RANK β RANK is INTEGER. The effective rank of A, i.e., the number of singular values which are greater than RCOND*S(1).
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 must be at least 1. The exact minimum amount of workspace needed depends on M, N and NRHS. As long as LWORK is at least
2 * N + N * NRHS
if M is greater than or equal to N or
2 * M + M * NRHS
if M is less than N, the code will execute correctly. For good performance, LWORK should generally be larger.
If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the array WORK and the minimum sizes of the arrays RWORK and IWORK, and returns these values as the first entries of the WORK, RWORK and IWORK arrays, and no error message related to LWORK is issued by XERBLA.
RWORK β RWORK is REAL array, dimension (MAX(1,LRWORK)). The requirement is:
LRWORK >=
10*N + 2*N*SMLSIZ + 8*N*NLVL + 3*SMLSIZ*NRHS +
MAX( (SMLSIZ+1)**2, N*(1+NRHS) + 2*NRHS )
if M is greater than or equal to N or
10*M + 2*M*SMLSIZ + 8*M*NLVL + 3*SMLSIZ*NRHS +
MAX( (SMLSIZ+1)**2, N*(1+NRHS) + 2*NRHS )
if M is less than N, the code will execute correctly.
SMLSIZ is returned by ILAENV and is equal to the maximum size of the subproblems at the bottom of the computation tree (usually about 25), and
NLVL = MAX( 0, INT( LOG_2( MIN( M,N )/(SMLSIZ+1) ) ) + 1 )
On exit, if INFO = 0, RWORK(1) returns the minimum LRWORK.
IWORK β IWORK is INTEGER array, dimension (MAX(1,LIWORK)). Constraint: LIWORK >= max(1, 3*MINMN*NLVL + 11*MINMN), where MINMN = MIN( M,N ). On exit, if INFO = 0, IWORK(1) returns the minimum LIWORK.
INFO β INFO is INTEGER.
= 0: successful exit< 0: if INFO = -i, the i-th argument had an illegal value.> 0: the algorithm for computing the SVD failed to converge; if INFO = i, i off-diagonal elements of an intermediate bidiagonal form did not converge to zero.
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Contributors π
- Ming Gu and Ren-Cang Li, Computer Science Division, University of California at Berkeley, USA
- Osni Marques, LBNL/NERSC, USA
Definition at line 217 of file cgelsd.f.
π dgelsd π
subroutine dgelsd (integer m, integer n, integer nrhs, double precision,
dimension( lda, * ) a, integer lda, double precision, dimension( ldb, *
) b, integer ldb, double precision, dimension( * ) s, double precision
rcond, integer rank, double precision, dimension( * ) work, integer
lwork, integer, dimension( * ) iwork, integer info)
DGELSD computes the minimum-norm solution to a linear least squares problem for GE matrices.
π― Purpose π―
DGELSD computes the minimum-norm solution to a real linear least squares problem:
minimize 2-norm(| b - A*x |)
using the singular value decomposition (SVD) of A. A is an M-by-N matrix which may be rank-deficient. β¨
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.
The problem is solved in three steps:
(1) Reduce the coefficient matrix A to bidiagonal form with
Householder transformations, reducing the original problem
into a (BLS)
(2) Solve the BLS using a divide and conquer approach.
(3) Apply back all the Householder transformations to solve
the original least squares problem.
The effective rank of A is determined by treating as zero those singular values which are less than RCOND times the largest singular value.
π Parameters π
M β M is INTEGER. The number of rows of A. Constraint: M >= 0.
N β N is INTEGER. The number of columns of A. Constraint: N >= 0.
NRHS β NRHS is INTEGER. The number of right hand sides, i.e., the number of columns of the matrices B and X. Constraint: NRHS >= 0.
A β A is DOUBLE PRECISION array, dimension (LDA,N). On entry, the M-by-N matrix A. On exit, A has been destroyed. π
LDA β LDA is INTEGER. The leading dimension of the array A. Constraint: LDA >= max(1,M).
B β B is DOUBLE PRECISION array, dimension (LDB,NRHS). On entry, the M-by-NRHS right hand side matrix B. On exit, B is overwritten by the N-by-NRHS solution matrix X. If m >= n and RANK = n, the residual sum-of-squares for the solution in the i-th column is given by the sum of squares of elements n+1:m in that column. π
LDB β LDB is INTEGER. The leading dimension of the array B. Constraint: LDB >= max(1,max(M,N)).
S β S is DOUBLE PRECISION array, dimension (min(M,N)). The singular values of A in decreasing order. The condition number of A in the 2-norm = S(1)/S(min(m,n)).
RCOND β (description continues in part 2, bestie π
)
RCONDβDOUBLE PRECISION, bestie. Itβs the cutoff for the effective rank ofA: singular valuesS(i) <= RCOND*S(1)are treated as zero. IfRCOND < 0, machine precision is used instead. Slay. β¨RANKβINTEGER. The effective rank ofA, i.e., the number of singular values which are greater thanRCOND*S(1). Thatβs the whole vibe check right there. πWORKβDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. Iconic little self-report, honestly. πLWORKβINTEGER. The dimension of the arrayWORK.LWORKmust be at least1. The exact minimum amount of workspace needed depends onM,NandNRHS. As long asLWORKis at least12*N + 2*N*SMLSIZ + 8*N*NLVL + N*NRHS + (SMLSIZ+1)**2, ifMis greater than or equal toNor12*M + 2*M*SMLSIZ + 8*M*NLVL + M*NRHS + (SMLSIZ+1)**2, ifMis less thanN, the code will execute correctly.SMLSIZis returned byILAENVand is equal to the maximum size of the subproblems at the bottom of the computation tree (usually about25), andNLVL = MAX( 0, INT( LOG_2( MIN( M,N )/(SMLSIZ+1) ) ) + 1 ). For good performance,LWORKshould generally be larger. IfLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of theWORKarray, and no error message related toLWORKis issued byXERBLA. Not me knowing all these workspace formulas by heart ππIWORKβINTEGERarray, dimension(MAX(1,LIWORK)).LIWORK >= max(1, 3 * MINMN * NLVL + 11 * MINMN), whereMINMN = MIN( M,N ). On exit, ifINFO = 0,IWORK(1)returns the minimumLIWORK. Cute, it also reports back. π«ΆINFOβINTEGER. The exit-status tea:
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value.
> 0: the algorithm for computing the SVD failed to converge;
if INFO = i, i off-diagonal elements of an intermediate
bidiagonal form did not converge to zero.
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π«Ά Contributors π«Ά
- Ming Gu and Ren-Cang Li, Computer Science Division, University of California at Berkeley, USA
- Osni Marques, LBNL/NERSC, USA
Definition at line 201 of file dgelsd.f.
πΈ subroutine sgelsd πΈ
subroutine sgelsd (integer m, integer n, integer nrhs, real, dimension( lda,
* ) a, integer lda, real, dimension( ldb, * ) b, integer ldb, real,
dimension( * ) s, real rcond, integer rank, real, dimension( * ) work,
integer lwork, integer, dimension( * ) iwork, integer info)
SGELSD computes the minimum-norm solution to a linear least squares problem for GE matrices.
β¨ Purpose β¨
Okay so SGELSD computes the minimum-norm solution to a real linear least squares problem:
minimize 2-norm(| b - A*x |)
using the singular value decomposition (SVD) of A. A is an M-by-N matrix which may be rank-deficient.
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.
The problem is solved in three steps:
- Reduce the coefficient matrix
Ato bidiagonal form with Householder transformations, reducing the original problem into a (BLS) β yes, thatβs literally the source text, bestie π«Ά - Solve the BLS using a divide and conquer approach.
- Apply back all the Householder transformations to solve the original least squares problem.
The effective rank of A is determined by treating as zero those singular values which are less than RCOND times the largest singular value.
π Parameters π
MβINTEGER. The number of rows ofA.M >= 0. Rows are having a main character moment. πNβINTEGER. The number of columns ofA.N >= 0.NRHSβINTEGER. The number of right hand sides, i.e., the number of columns of the matricesBandX.NRHS >= 0.AβREALarray, dimension(LDA,N). On entry, theM-by-NmatrixA. On exit,Ahas been destroyed. Not βmodified,β bestie β destroyed πLDAβINTEGER. The leading dimension of the arrayA.LDA >= max(1,M).BβREALarray, dimension(LDB,NRHS). On entry, theM-by-NRHSright hand side matrixB. On exit,Bis overwritten by theN-by-NRHSsolution matrixX. Ifm >= nandRANK = n, the residual sum-of-squares for the solution in thei-th column is given by the sum of squares of elementsn+1:min that column. Little glow-up moment forB. β¨LDBβINTEGER. The leading dimension of the arrayB.LDB >= max(1,max(M,N)).SβREALarray, dimension(min(M,N)). The singular values ofAin decreasing order. The condition number ofAin the 2-norm =S(1)/S(min(m,n)). Math girlies rise. πRCONDβREAL.RCONDis used to determine the effective rank ofA. Singular valuesS(i) <= RCOND*S(1)are treated as zero. IfRCOND < 0, machine precision is used instead.RANKβINTEGER. The effective rank ofA, i.e., the number of singular values which are greater thanRCOND*S(1).WORKβREALarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβINTEGER. The dimension of the arrayWORK.LWORKmust be at least1. The exact minimum amount of workspace needed depends onM,NandNRHS. As long asLWORKis at least12*N + 2*N*SMLSIZ + 8*N*NLVL + N*NRHS + (SMLSIZ+1)**2, ifMis greater than or equal toNor12*M + 2*M*SMLSIZ + 8*M*NLVL + M*NRHS + (SMLSIZ+1)**2, ifMis less thanN, the code will execute correctly.SMLSIZis returned byILAENVand is equal to the maximum size of the subproblems at the bottom of the computation tree (usually about25), andNLVL = MAX( 0, INT( LOG_2( MIN( M,N )/(SMLSIZ+1) ) ) + 1 ). For good performance,LWORKshould generally be larger. IfLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the arrayWORKand the minimum size of the arrayIWORK, and returns these values as the first entries of theWORKandIWORKarrays, and no error message related toLWORKis issued byXERBLA. Sheβs thorough, okay? πIWORKβINTEGERarray, dimension(MAX(1,LIWORK)).LIWORK >= max(1, 3*MINMN*NLVL + 11*MINMN), whereMINMN = MIN( M,N ). On exit, ifINFO = 0,IWORK(1)returns the minimumLIWORK.INFOβINTEGER. The exit-status tea:
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value.
> 0: the algorithm for computing the SVD failed to converge;
if INFO = i, i off-diagonal elements of an intermediate
bidiagonal form did not converge to zero.
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π«Ά Contributors π«Ά
- Ming Gu and Ren-Cang Li, Computer Science Division, University of California at Berkeley, USA
- Osni Marques, LBNL/NERSC, USA
Definition at line 202 of file sgelsd.f.
π subroutine zgelsd π
subroutine zgelsd (integer m, integer n, integer nrhs, complex*16,
dimension( lda, * ) a, integer lda, complex*16, dimension( ldb, * ) b,
integer ldb, double precision, dimension( * ) s, double precision rcond,
integer rank, complex*16, dimension( * ) work, integer lwork, double
precision, dimension( * ) rwork, integer, dimension( * ) iwork, integer
info)
ZGELSD computes the minimum-norm solution to a linear least squares problem for GE matrices.
β Purpose β
ZGELSD computes the minimum-norm solution to a real linear least squares problem:
minimize 2-norm(| b - A*x |)
using the singular value decomposition (SVD) of A. A is an M-by-N matrix which may be rank-deficient.
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.
The problem is solved in three steps:
- Reduce the coefficient matrix
Ato bidiagonal form with Householder transformations, reducing the original problem into a (BLS) β same exact source text, no cap π«Ά - Solve the BLS using a divide and conquer approach.
- Apply back all the Householder transformations to solve the original least squares problem.
The effective rank of A is determined by treating as zero those singular values which are less than RCOND times the largest singular value.
π¦ Parameters π¦
MβINTEGER. The number of rows of the matrixA.M >= 0.NβINTEGER. The number of columns of the matrixA.N >= 0.NRHSβINTEGER. The number of right hand sides, i.e., the number of columns of the matricesBandX.NRHS >= 0.Aβ
A
A is COMPLEX*16 array, dimension (LDA,N) π
on entry it's the M-by-N matrix A, and on exit β bestie, brace yourself β A has been destroyed. Gone. Reduced to atoms. She served her purpose π
LDA
LDA is INTEGER. She's the leading dimension of the array A, and the vibe check is LDA >= max(1,M) π«Ά
B
B is COMPLEX*16 array, dimension (LDB,NRHS). On entry she's the M-by-NRHS right hand side matrix B, and on exit she gets overwritten by the N-by-NRHS solution matrix X β glow-up, honestly β¨
Also, tiny detail that actually matters: if m >= n and RANK = n, the residual sum-of-squares for the solution in the i-th column is given by the sum of squares of the modulus of elements n+1:m in that column π
LDB
LDB is INTEGER. Leading dimension of the array B, and the rule is LDB >= max(1,M,N) β yes, both of them, no cutting corners π
S
S is DOUBLE PRECISION array, dimension (min(M,N)). She holds the singular values of A in decreasing order π
And the condition number of A in the 2-norm = S(1)/S(min(m,n)) β iconic little formula, iykyk πΈ
RCOND
RCOND is DOUBLE PRECISION. She's the one who decides the effective rank of A: singular values S(i) <= RCOND*S(1) get treated as zero, like they never even showed up π
And if RCOND < 0, machine precision is used instead β the "I don't wanna pick, you pick" option fr fr.
RANK
RANK is INTEGER. The effective rank of A, i.e. the number of singular values which are greater than RCOND*S(1) β
WORK
WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK π
LWORK
LWORK is INTEGER, and she is the dimension of the array WORK. LWORK must be at least 1.
The exact minimum amount of workspace needed depends on M, N and NRHS. As long as LWORK is at least
2*N + N*NRHS
if M is greater than or equal to N, or
2*M + M*NRHS
if M is less than N, the code will execute correctly β
For good performance, LWORK should generally be larger β she's not a "bare minimum" kind of girl, give her room to breathe π¦
Ok so ifLWORK = -1, a workspace query is assumed π the routine only calculates the optimal size of the arrayWORKand the minimum sizes of the arraysRWORKandIWORK, and returns these values as the first entries of theWORK,RWORKandIWORKarrays β and no error message related toLWORKis issued byXERBLA. Like, she's just asking, don't yell at her π
RWORK
RWORK is DOUBLE PRECISION array, dimension (MAX(1,LRWORK)). The requirements are:
LRWORK >=
10*N + 2*N*SMLSIZ + 8*N*NLVL + 3*SMLSIZ*NRHS +
MAX( (SMLSIZ+1)**2, N*(1+NRHS) + 2*NRHS )
if M is greater than or equal to N, or
LRWORK >=
10*M + 2*M*SMLSIZ + 8*M*NLVL + 3*SMLSIZ*NRHS +
MAX( (SMLSIZ+1)**2, N*(1+NRHS) + 2*NRHS )
if M is less than N, and then the code will execute correctly π€
SMLSIZ is returned by ILAENV and is equal to the maximum size of the subproblems at the bottom of the computation tree (usually about 25), and
NLVL = MAX( 0, INT( LOG_2( MIN( M,N )/(SMLSIZ+1) ) ) + 1 )
On exit, if INFO = 0, RWORK(1) returns the minimum LRWORK π
IWORK
IWORK is INTEGER array, dimension (MAX(1,LIWORK)), and
LIWORK >= max(1, 3*MINMN*NLVL + 11*MINMN),
where MINMN = MIN( M,N ) π§
On exit, if INFO = 0, IWORK(1) returns the minimum LIWORK π
INFO
INFO is INTEGER, the main character of the status report:
= 0: successful exit π slay< 0: ifINFO = -i, the i-th argument had an illegal value β rude of you honestly> 0: the algorithm for computing the SVD failed to converge π ifINFO = i,ioff-diagonal elements of an intermediate bidiagonal form did not converge to zero
π Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
π Contributors:
Ming Gu and Ren-Cang Li, Computer Science Division, University of California at Berkeley, USA
Osni Marques, LBNL/NERSC, USA
Definition at line 217 of file zgelsd.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code.
okay that's the whole thing bestie, we ate and left no crumbs π this little gem is the gelsd(3) page from the LAPACK source, Version 3.12.0 β go forth and solve those least-squares problems, ily, bye π«Άπβ¨
π¦ 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