---
name: "gglse"
section: "3"
platform: "linux"
package: "lapack-doc"
version: "3.12.1-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/gglse"
---

# gglse(3)

gglse: equality-constrained least squares

## NAME

gglse - gglse: equality-constrained least squares

## SYNOPSIS

### Functions

subroutine **cgglse** (m, n, p, a, lda, b, ldb, c, d, x, work, lwork, info)\
  **CGGLSE solves overdetermined or underdetermined systems for OTHER matrices**  subroutine **dgglse** (m, n, p, a, lda, b, ldb, c, d, x, work, lwork, info)\
  **DGGLSE solves overdetermined or underdetermined systems for OTHER matrices**  subroutine **sgglse** (m, n, p, a, lda, b, ldb, c, d, x, work, lwork, info)\
  **SGGLSE solves overdetermined or underdetermined systems for OTHER matrices**  subroutine **zgglse** (m, n, p, a, lda, b, ldb, c, d, x, work, lwork, info)\
  **ZGGLSE solves overdetermined or underdetermined systems for OTHER matrices**

## Detailed Description

## Function 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:**

```
!>
!> 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.
!>
!>
```

**Parameters**

*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, the M-by-N matrix A.
!>          On exit, the elements on and above the diagonal of the array
!>          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, 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 contains 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 contains the right hand side vector for the
!>          constrained equation.
!>          On exit, D is destroyed.
!>
```

*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.
!>
!>          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.
!>
```

*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
!>                    ( (B) )
!>                be computed.
!>
```

**Author**

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line **188** of file **cgglse.f**.

### subroutine dgglse (integer m, integer n, integer p, double precision, dimension( lda, \* ) a, integer lda, double precision, dimension( ldb, \* ) b, integer ldb, double precision, dimension( \* ) c, double precision, dimension( \* ) d, double precision, dimension( \* ) x, double precision, dimension( \* ) work, integer lwork, integer info)

 **DGGLSE solves overdetermined or underdetermined systems for OTHER matrices**

**Purpose:**

```
!>
!> DGGLSE 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 DTRTRS 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.
!>
!>
```

**Parameters**

*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 DOUBLE PRECISION array, dimension (LDA,N)
!>          On entry, the M-by-N matrix A.
!>          On exit, the elements on and above the diagonal of the array
!>          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 DOUBLE PRECISION array, dimension (LDB,N)
!>          On entry, 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 DOUBLE PRECISION array, dimension (M)
!>          On entry, C contains 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 DOUBLE PRECISION array, dimension (P)
!>          On entry, D contains the right hand side vector for the
!>          constrained equation.
!>          On exit, D is destroyed.
!>
```

*X*

```
!>          X is DOUBLE PRECISION array, dimension (N)
!>          On exit, X is the solution of the LSE problem.
!>
```

*WORK*

```
!>          WORK is DOUBLE PRECISION 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
!>          DGEQRF, SGERQF, DORMQR and SORMRQ.
!>
!>          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.
!>
```

*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
!>                    ( (B) )
!>                be computed.
!>
```

**Author**

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line **188** of file **dgglse.f**.

### subroutine sgglse (integer m, integer n, integer p, real, dimension( lda, \* ) a, integer lda, real, dimension( ldb, \* ) b, integer ldb, real, dimension( \* ) c, real, dimension( \* ) d, real, dimension( \* ) x, real, dimension( \* ) work, integer lwork, integer info)

 **SGGLSE solves overdetermined or underdetermined systems for OTHER matrices**

**Purpose:**

```
!>
!> SGGLSE 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 STRTRS 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.
!>
!>
```

**Parameters**

*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 REAL array, dimension (LDA,N)
!>          On entry, the M-by-N matrix A.
!>          On exit, the elements on and above the diagonal of the array
!>          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 REAL array, dimension (LDB,N)
!>          On entry, 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 REAL array, dimension (M)
!>          On entry, C contains 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 REAL array, dimension (P)
!>          On entry, D contains the right hand side vector for the
!>          constrained equation.
!>          On exit, D is destroyed.
!>
```

*X*

```
!>          X is REAL array, dimension (N)
!>          On exit, X is the solution of the LSE problem.
!>
```

*WORK*

```
!>          WORK is REAL 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
!>          SGEQRF, SGERQF, SORMQR and SORMRQ.
!>
!>          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.
!>
```

*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
!>                    ( (B) )
!>                be computed.
!>
```

**Author**

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line **188** of file **sgglse.f**.

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

 **ZGGLSE solves overdetermined or underdetermined systems for OTHER matrices**

**Purpose:**

```
!>
!> ZGGLSE 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 ZTRTRS 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.
!>
!>
```

**Parameters**

*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*16 array, dimension (LDA,N)
!>          On entry, the M-by-N matrix A.
!>          On exit, the elements on and above the diagonal of the array
!>          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*16 array, dimension (LDB,N)
!>          On entry, 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*16 array, dimension (M)
!>          On entry, C contains 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*16 array, dimension (P)
!>          On entry, D contains the right hand side vector for the
!>          constrained equation.
!>          On exit, D is destroyed.
!>
```

*X*

```
!>          X is COMPLEX*16 array, dimension (N)
!>          On exit, X is the solution of the LSE 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,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
!>          ZGEQRF, CGERQF, ZUNMQR and CUNMRQ.
!>
!>          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.
!>
```

*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
!>                    ( (B) )
!>                be computed.
!>
```

**Author**

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line **188** of file **zgglse.f**.

## Author

Generated automatically by Doxygen for LAPACK from the source code.
