ZGGGLM(3)
π ZGGGLM(3) β bestie edition
okay so you've stumbled into zggglm.f from the LAPACK 3.12.0 source tree, and honestly? this one's kind of a baddie. it lives at:
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zggglm.f
it's a Library Functions Manual situation, and the whole file is just here to serve up one single icon of a routine. slay.
β¨ SYNOPSIS β¨
Functions/Subroutines π«Ά
subroutine ZGGGLM (n, m, p, a, lda, b, ldb, d, x, y, work, lwork, info)β the one, the only, ZGGGLM π
πΈ Function/Subroutine Documentation πΈ
subroutine ZGGGLM (integer n, integer m, integer p, complex*16, dimension(
lda, * ) a, integer lda, complex*16, dimension( ldb, * ) b, integer ldb,
complex*16, dimension( * ) d, complex*16, dimension( * ) x, complex*16,
dimension( * ) y, complex*16, dimension( * ) work, integer lwork,
integer info)
ZGGGLM. that's her name. π
β¨ Purpose β¨
!>
!> ZGGGLM solves a general Gauss-Markov linear model (GLM) problem:
!>
!> minimize || y ||_2 subject to d = A*x + B*y
!> x
!>
!> where A is an N-by-M matrix, B is an N-by-P matrix, and d is a
!> given N-vector. It is assumed that M <= N <= M+P, and
!>
!> rank(A) = M and rank( A B ) = N.
!>
!> Under these assumptions, the constrained equation is always
!> consistent, and there is a unique solution x and a minimal 2-norm
!> solution y, which is obtained using a generalized QR factorization
!> of the matrices (A, B) given by
!>
!> A = Q*(R), B = Q*T*Z.
!> (0)
!>
!> In particular, if matrix B is square nonsingular, then the problem
!> GLM is equivalent to the following weighted linear least squares
!> problem
!>
!> minimize || inv(B)*(d-A*x) ||_2
!> x
!>
!> where inv(B) denotes the inverse of B.
!>
so basically: you're minimizing || y ||_2 over x, subject to d = A*x + B*y, no cap. π₯
π Parameters π
N
!> N is INTEGER
!> The number of rows of the matrices A and B. N >= 0.
!>
M
!> M is INTEGER
!> The number of columns of the matrix A. 0 <= M <= N.
!>
P
!> P is INTEGER
!> The number of columns of the matrix B. P >= N-M.
!>
A
!> A is COMPLEX*16 array, dimension (LDA,M)
!> On entry, the N-by-M matrix A.
!> On exit, the upper triangular part of the array A contains
!> the M-by-M upper triangular matrix R.
!>
LDA
!> LDA is INTEGER
!> The leading dimension of the array A. LDA >= max(1,N).
!>
B
!> B is COMPLEX*16 array, dimension (LDB,P)
!> On entry, the N-by-P matrix B.
!> On exit, if N <= P, the upper triangle of the subarray
!> B(1:N,P-N+1:P) contains the N-by-N upper triangular matrix T;
!> if N > P, the elements on and above the (N-P)th subdiagonal
!> contain the N-by-P upper trapezoidal matrix T.
!>
LDB
!> LDB is INTEGER
!> The leading dimension of the array B. LDB >= max(1,N).
!>
D
!> D is COMPLEX*16 array, dimension (N)
!> On entry, D is the left hand side of the GLM equation.
!> On exit, D is destroyed.
!>
β οΈ bestie listen. D gets destroyed on exit. she does not survive. do not come looking for her later, she's gone π
X
!> X is COMPLEX*16 array, dimension (M)
!>
Y
!> Y is COMPLEX*16 array, dimension (P)
!>
!> On exit, X and Y are the solutions of the GLM problem.
!>
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
!> The dimension of the array WORK. LWORK >= max(1,N+M+P).
!> For optimum performance, LWORK >= M+min(N,P)+max(N,P)*NB,
!> where NB is an upper bound for the optimal blocksizes for
!> ZGEQRF, ZGERQF, ZUNMQR and ZUNMRQ.
!>
!> 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.
!>
π LWORK = -1 is the little "actually, just tell me how much room you need" move β she won't yell at you via XERBLA for that one. very cutesy of her.
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 A in the
!> generalized QR factorization of the pair (A, B) is
!> singular, so that rank(A) < M; the least squares
!> solution could not be computed.
!> = 2: the bottom (N-M) by (N-M) part of the upper trapezoidal
!> factor T associated with B in the generalized QR
!> factorization of the pair (A, B) is singular, so that
!> rank( A B ) < N; the least squares solution could not
!> be computed.
!>
so like β 0 slays, negative means somebody passed a bad argument, 1 means R is singular so rank(A) < M and the least squares solution could not be computed π, and 2 means that bottom (N-M) by (N-M) chunk of T is singular so rank( A B ) < N and again, no solution for you, the least squares solution could not be computed. heartbreaking. π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
the whole collective. the avengers of numerical linear algebra fr fr π
Definition at line 183 of file zggglm.f.
β Author (again, yes really) β
Generated automatically by Doxygen for LAPACK from the source code. she didn't write herself, bestie, the robots did it π§
βΏ that's the whole page βΏ β LAPACK, Version 3.12.0, straight out of /home/abui...RC/zggglm.f(3). go forth and solve your GLM problems, you gorgeous genius πππ¦
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms