From 5475251aba635560a9e006febf29348a574b3b6c Mon Sep 17 00:00:00 2001 From: GYT Date: Wed, 1 Nov 2023 20:28:00 +0100 Subject: [PATCH 1/8] Add note to *TRTRS and *TBTRS about how only exact singularity is checked --- SRC/ctbtrs.f | 10 ++++++++-- SRC/ctrtrs.f | 10 ++++++++-- SRC/dtbtrs.f | 10 ++++++++-- SRC/dtrtrs.f | 10 ++++++++-- SRC/stbtrs.f | 10 ++++++++-- SRC/strtrs.f | 10 ++++++++-- SRC/ztbtrs.f | 10 ++++++++-- SRC/ztrtrs.f | 10 ++++++++-- 8 files changed, 64 insertions(+), 16 deletions(-) diff --git a/SRC/ctbtrs.f b/SRC/ctbtrs.f index e5da1aeae8..95cbc27a86 100644 --- a/SRC/ctbtrs.f +++ b/SRC/ctbtrs.f @@ -39,8 +39,14 @@ *> *> A * X = B, A**T * X = B, or A**H * X = B, *> -*> where A is a triangular band matrix of order N, and B is an -*> N-by-NRHS matrix. A check is made to verify that A is nonsingular. +*> where A is a triangular band matrix of order N, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: diff --git a/SRC/ctrtrs.f b/SRC/ctrtrs.f index e17785402d..9318ab090a 100644 --- a/SRC/ctrtrs.f +++ b/SRC/ctrtrs.f @@ -39,8 +39,14 @@ *> *> A * X = B, A**T * X = B, or A**H * X = B, *> -*> where A is a triangular matrix of order N, and B is an N-by-NRHS -*> matrix. A check is made to verify that A is nonsingular. +*> where A is a triangular matrix of order N, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: diff --git a/SRC/dtbtrs.f b/SRC/dtbtrs.f index 166cd0dc33..01657501ba 100644 --- a/SRC/dtbtrs.f +++ b/SRC/dtbtrs.f @@ -39,8 +39,14 @@ *> *> A * X = B or A**T * X = B, *> -*> where A is a triangular band matrix of order N, and B is an -*> N-by NRHS matrix. A check is made to verify that A is nonsingular. +*> where A is a triangular band matrix of order N, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: diff --git a/SRC/dtrtrs.f b/SRC/dtrtrs.f index 184b213e6b..13c5ee091c 100644 --- a/SRC/dtrtrs.f +++ b/SRC/dtrtrs.f @@ -39,8 +39,14 @@ *> *> A * X = B or A**T * X = B, *> -*> where A is a triangular matrix of order N, and B is an N-by-NRHS -*> matrix. A check is made to verify that A is nonsingular. +*> where A is a triangular matrix of order N, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: diff --git a/SRC/stbtrs.f b/SRC/stbtrs.f index 103e1d28ce..a5ea539df7 100644 --- a/SRC/stbtrs.f +++ b/SRC/stbtrs.f @@ -39,8 +39,14 @@ *> *> A * X = B or A**T * X = B, *> -*> where A is a triangular band matrix of order N, and B is an -*> N-by NRHS matrix. A check is made to verify that A is nonsingular. +*> where A is a triangular band matrix of order N, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: diff --git a/SRC/strtrs.f b/SRC/strtrs.f index 6cba2e842b..19dd4f75d9 100644 --- a/SRC/strtrs.f +++ b/SRC/strtrs.f @@ -39,8 +39,14 @@ *> *> A * X = B or A**T * X = B, *> -*> where A is a triangular matrix of order N, and B is an N-by-NRHS -*> matrix. A check is made to verify that A is nonsingular. +*> where A is a triangular matrix of order N, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: diff --git a/SRC/ztbtrs.f b/SRC/ztbtrs.f index d21efe61d2..62c7a0453d 100644 --- a/SRC/ztbtrs.f +++ b/SRC/ztbtrs.f @@ -39,8 +39,14 @@ *> *> A * X = B, A**T * X = B, or A**H * X = B, *> -*> where A is a triangular band matrix of order N, and B is an -*> N-by-NRHS matrix. A check is made to verify that A is nonsingular. +*> where A is a triangular band matrix of order N, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: diff --git a/SRC/ztrtrs.f b/SRC/ztrtrs.f index 728e0a403d..63b64026f4 100644 --- a/SRC/ztrtrs.f +++ b/SRC/ztrtrs.f @@ -39,8 +39,14 @@ *> *> A * X = B, A**T * X = B, or A**H * X = B, *> -*> where A is a triangular matrix of order N, and B is an N-by-NRHS -*> matrix. A check is made to verify that A is nonsingular. +*> where A is a triangular matrix of order N, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: From 4afdca25b22817b3b0a67eeb377814e8c4464f21 Mon Sep 17 00:00:00 2001 From: GYT Date: Wed, 1 Nov 2023 20:51:18 +0100 Subject: [PATCH 2/8] Add "exact" to *TRTRS and *TBTRS info value descriptions --- SRC/ctbtrs.f | 2 +- SRC/ctrtrs.f | 2 +- SRC/dtbtrs.f | 2 +- SRC/dtrtrs.f | 2 +- SRC/stbtrs.f | 2 +- SRC/strtrs.f | 2 +- SRC/ztbtrs.f | 2 +- SRC/ztrtrs.f | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/SRC/ctbtrs.f b/SRC/ctbtrs.f index 95cbc27a86..cb62eb339f 100644 --- a/SRC/ctbtrs.f +++ b/SRC/ctbtrs.f @@ -131,7 +131,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the *> solutions X have not been computed. *> \endverbatim diff --git a/SRC/ctrtrs.f b/SRC/ctrtrs.f index 9318ab090a..18b493c836 100644 --- a/SRC/ctrtrs.f +++ b/SRC/ctrtrs.f @@ -125,7 +125,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the solutions *> X have not been computed. *> \endverbatim diff --git a/SRC/dtbtrs.f b/SRC/dtbtrs.f index 01657501ba..93e7c55520 100644 --- a/SRC/dtbtrs.f +++ b/SRC/dtbtrs.f @@ -131,7 +131,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the *> solutions X have not been computed. *> \endverbatim diff --git a/SRC/dtrtrs.f b/SRC/dtrtrs.f index 13c5ee091c..2c23850d9f 100644 --- a/SRC/dtrtrs.f +++ b/SRC/dtrtrs.f @@ -125,7 +125,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the solutions *> X have not been computed. *> \endverbatim diff --git a/SRC/stbtrs.f b/SRC/stbtrs.f index a5ea539df7..2c59b36161 100644 --- a/SRC/stbtrs.f +++ b/SRC/stbtrs.f @@ -131,7 +131,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the *> solutions X have not been computed. *> \endverbatim diff --git a/SRC/strtrs.f b/SRC/strtrs.f index 19dd4f75d9..609344c618 100644 --- a/SRC/strtrs.f +++ b/SRC/strtrs.f @@ -125,7 +125,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the solutions *> X have not been computed. *> \endverbatim diff --git a/SRC/ztbtrs.f b/SRC/ztbtrs.f index 62c7a0453d..66aface3e1 100644 --- a/SRC/ztbtrs.f +++ b/SRC/ztbtrs.f @@ -131,7 +131,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the *> solutions X have not been computed. *> \endverbatim diff --git a/SRC/ztrtrs.f b/SRC/ztrtrs.f index 63b64026f4..c4735f126f 100644 --- a/SRC/ztrtrs.f +++ b/SRC/ztrtrs.f @@ -125,7 +125,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the solutions *> X have not been computed. *> \endverbatim From 6922840707c3a74273aab04c95b2f105a4c11e11 Mon Sep 17 00:00:00 2001 From: GYT Date: Wed, 1 Nov 2023 20:57:22 +0100 Subject: [PATCH 3/8] Add notes to *TPTRS about how only exact singularity is checked --- SRC/ctptrs.f | 13 +++++++++---- SRC/dtptrs.f | 13 +++++++++---- SRC/stptrs.f | 13 +++++++++---- SRC/ztptrs.f | 13 +++++++++---- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/SRC/ctptrs.f b/SRC/ctptrs.f index 456e1b7824..368f58ec97 100644 --- a/SRC/ctptrs.f +++ b/SRC/ctptrs.f @@ -38,9 +38,14 @@ *> *> A * X = B, A**T * X = B, or A**H * X = B, *> -*> where A is a triangular matrix of order N stored in packed format, -*> and B is an N-by-NRHS matrix. A check is made to verify that A is -*> nonsingular. +*> where A is a triangular matrix of order N stored in packed format, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: @@ -110,7 +115,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the *> solutions X have not been computed. *> \endverbatim diff --git a/SRC/dtptrs.f b/SRC/dtptrs.f index 3b3a8906b3..1fb5eebaae 100644 --- a/SRC/dtptrs.f +++ b/SRC/dtptrs.f @@ -38,9 +38,14 @@ *> *> A * X = B or A**T * X = B, *> -*> where A is a triangular matrix of order N stored in packed format, -*> and B is an N-by-NRHS matrix. A check is made to verify that A is -*> nonsingular. +*> where A is a triangular matrix of order N stored in packed format, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: @@ -110,7 +115,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the *> solutions X have not been computed. *> \endverbatim diff --git a/SRC/stptrs.f b/SRC/stptrs.f index 556f03c642..71a4e12299 100644 --- a/SRC/stptrs.f +++ b/SRC/stptrs.f @@ -38,9 +38,14 @@ *> *> A * X = B or A**T * X = B, *> -*> where A is a triangular matrix of order N stored in packed format, -*> and B is an N-by-NRHS matrix. A check is made to verify that A is -*> nonsingular. +*> where A is a triangular matrix of order N stored in packed format, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: @@ -110,7 +115,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the *> solutions X have not been computed. *> \endverbatim diff --git a/SRC/ztptrs.f b/SRC/ztptrs.f index cfddc32513..fcc4b03551 100644 --- a/SRC/ztptrs.f +++ b/SRC/ztptrs.f @@ -38,9 +38,14 @@ *> *> A * X = B, A**T * X = B, or A**H * X = B, *> -*> where A is a triangular matrix of order N stored in packed format, -*> and B is an N-by-NRHS matrix. A check is made to verify that A is -*> nonsingular. +*> where A is a triangular matrix of order N stored in packed format, and B is an N-by-NRHS matrix. +*> +*> This subroutine verifies that A is nonsingular, but callers should note that only exact +*> singularity is detected. It is conceivable for one or more diagonal elements of A to be +*> subnormally tiny numbers without this subroutine signalling an error. +*> +*> If a possible loss of numerical precision due to near-singular matrices is a concern, the +*> caller should verify that A is nonsingular within some tolerance before calling this subroutine. *> \endverbatim * * Arguments: @@ -110,7 +115,7 @@ *> INFO is INTEGER *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value -*> > 0: if INFO = i, the i-th diagonal element of A is zero, +*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero, *> indicating that the matrix is singular and the *> solutions X have not been computed. *> \endverbatim From 1bf0ea2f93cec3f7ad8c927af1af3afb738abe41 Mon Sep 17 00:00:00 2001 From: GYT Date: Wed, 1 Nov 2023 21:55:28 +0100 Subject: [PATCH 4/8] Add notes to *GELS about how only exact rank-deficiency is checked --- SRC/cgels.f | 14 ++++++++++++-- SRC/dgels.f | 14 ++++++++++++-- SRC/sgels.f | 14 ++++++++++++-- SRC/zgels.f | 14 ++++++++++++-- 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/SRC/cgels.f b/SRC/cgels.f index 740bac890e..4dda66f910 100644 --- a/SRC/cgels.f +++ b/SRC/cgels.f @@ -37,7 +37,17 @@ *> *> CGELS solves overdetermined or underdetermined complex linear systems *> involving an M-by-N matrix A, or its conjugate-transpose, using a QR -*> or LQ factorization of A. It is assumed that A has full rank. +*> or LQ factorization of A. +*> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> The following options are provided: *> @@ -161,7 +171,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim diff --git a/SRC/dgels.f b/SRC/dgels.f index 90b2c91aa2..2376330a15 100644 --- a/SRC/dgels.f +++ b/SRC/dgels.f @@ -37,7 +37,17 @@ *> *> DGELS solves overdetermined or underdetermined real linear systems *> involving an M-by-N matrix A, or its transpose, using a QR or LQ -*> factorization of A. It is assumed that A has full rank. +*> factorization of A. +*> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> The following options are provided: *> @@ -162,7 +172,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim diff --git a/SRC/sgels.f b/SRC/sgels.f index 9a311a8254..1630ec239e 100644 --- a/SRC/sgels.f +++ b/SRC/sgels.f @@ -37,7 +37,17 @@ *> *> SGELS solves overdetermined or underdetermined real linear systems *> involving an M-by-N matrix A, or its transpose, using a QR or LQ -*> factorization of A. It is assumed that A has full rank. +*> factorization of A. +*> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> The following options are provided: *> @@ -162,7 +172,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim diff --git a/SRC/zgels.f b/SRC/zgels.f index 2b8913c198..b373d9a226 100644 --- a/SRC/zgels.f +++ b/SRC/zgels.f @@ -37,7 +37,17 @@ *> *> ZGELS solves overdetermined or underdetermined complex linear systems *> involving an M-by-N matrix A, or its conjugate-transpose, using a QR -*> or LQ factorization of A. It is assumed that A has full rank. +*> or LQ factorization of A. +*> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> The following options are provided: *> @@ -161,7 +171,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim From ba91e7eddbbe54f5fc55bce06a1e9bef81cf14a5 Mon Sep 17 00:00:00 2001 From: GYT Date: Thu, 2 Nov 2023 01:55:27 +0100 Subject: [PATCH 5/8] Add notes to *GELST about how only exact rank-deficiency is checked --- SRC/cgelst.f | 13 +++++++++++-- SRC/dgelst.f | 13 +++++++++++-- SRC/sgelst.f | 13 +++++++++++-- SRC/zgelst.f | 13 +++++++++++-- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/SRC/cgelst.f b/SRC/cgelst.f index 0178c53dcb..fe0ea3be88 100644 --- a/SRC/cgelst.f +++ b/SRC/cgelst.f @@ -38,7 +38,16 @@ *> CGELST solves overdetermined or underdetermined real linear systems *> involving an M-by-N matrix A, or its conjugate-transpose, using a QR *> or LQ factorization of A with compact WY representation of Q. -*> It is assumed that A has full rank. +*> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> The following options are provided: *> @@ -163,7 +172,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim diff --git a/SRC/dgelst.f b/SRC/dgelst.f index aadb5af57f..24129517e7 100644 --- a/SRC/dgelst.f +++ b/SRC/dgelst.f @@ -38,7 +38,16 @@ *> DGELST solves overdetermined or underdetermined real linear systems *> involving an M-by-N matrix A, or its transpose, using a QR or LQ *> factorization of A with compact WY representation of Q. -*> It is assumed that A has full rank. +*> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> The following options are provided: *> @@ -163,7 +172,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim diff --git a/SRC/sgelst.f b/SRC/sgelst.f index 3c6ccf16f9..613a2b0d01 100644 --- a/SRC/sgelst.f +++ b/SRC/sgelst.f @@ -38,7 +38,16 @@ *> SGELST solves overdetermined or underdetermined real linear systems *> involving an M-by-N matrix A, or its transpose, using a QR or LQ *> factorization of A with compact WY representation of Q. -*> It is assumed that A has full rank. +*> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> The following options are provided: *> @@ -163,7 +172,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim diff --git a/SRC/zgelst.f b/SRC/zgelst.f index 09f7ccd7b2..9c1767f847 100644 --- a/SRC/zgelst.f +++ b/SRC/zgelst.f @@ -38,7 +38,16 @@ *> ZGELST solves overdetermined or underdetermined real linear systems *> involving an M-by-N matrix A, or its conjugate-transpose, using a QR *> or LQ factorization of A with compact WY representation of Q. -*> It is assumed that A has full rank. +*> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> The following options are provided: *> @@ -163,7 +172,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim From 3ed4768ed021cd595e79a333d9d556343c2fe474 Mon Sep 17 00:00:00 2001 From: GYT Date: Wed, 22 Nov 2023 15:12:20 +0100 Subject: [PATCH 6/8] Add notes to *GETSLS about how only exact rank-deficiency is checked --- SRC/cgetsls.f | 13 +++++++++++-- SRC/dgetsls.f | 13 +++++++++++-- SRC/sgetsls.f | 13 +++++++++++-- SRC/zgetsls.f | 13 +++++++++++-- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/SRC/cgetsls.f b/SRC/cgetsls.f index 606e814374..87bf2dd71a 100644 --- a/SRC/cgetsls.f +++ b/SRC/cgetsls.f @@ -22,8 +22,17 @@ *> *> CGETSLS solves overdetermined or underdetermined complex linear systems *> involving an M-by-N matrix A, using a tall skinny QR or short wide LQ -*> factorization of A. It is assumed that A has full rank. +*> factorization of A. *> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> *> The following options are provided: @@ -141,7 +150,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim diff --git a/SRC/dgetsls.f b/SRC/dgetsls.f index 73b505ff7e..9db9b491cc 100644 --- a/SRC/dgetsls.f +++ b/SRC/dgetsls.f @@ -22,8 +22,17 @@ *> *> DGETSLS solves overdetermined or underdetermined real linear systems *> involving an M-by-N matrix A, using a tall skinny QR or short wide LQ -*> factorization of A. It is assumed that A has full rank. +*> factorization of A. *> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> *> The following options are provided: @@ -141,7 +150,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim diff --git a/SRC/sgetsls.f b/SRC/sgetsls.f index ce4e02d4f5..2946d732e0 100644 --- a/SRC/sgetsls.f +++ b/SRC/sgetsls.f @@ -22,8 +22,17 @@ *> *> SGETSLS solves overdetermined or underdetermined real linear systems *> involving an M-by-N matrix A, using a tall skinny QR or short wide LQ -*> factorization of A. It is assumed that A has full rank. +*> factorization of A. *> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> *> The following options are provided: @@ -141,7 +150,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim diff --git a/SRC/zgetsls.f b/SRC/zgetsls.f index 26311c611b..20b2278ccb 100644 --- a/SRC/zgetsls.f +++ b/SRC/zgetsls.f @@ -22,8 +22,17 @@ *> *> ZGETSLS solves overdetermined or underdetermined complex linear systems *> involving an M-by-N matrix A, using a tall skinny QR or short wide LQ -*> factorization of A. It is assumed that A has full rank. +*> factorization of A. *> +*> It is assumed that A has full rank, and only a rudimentary protection +*> against rank-deficient matrices is provided. This subroutine only detects +*> exact rank-deficiency, where a diagonal element of the triangular factor +*> of A is exactly zero. +*> +*> It is conceivable for one (or more) of the diagonal elements of the triangular +*> factor of A to be subnormally tiny numbers without this subroutine signalling +*> an error. The solutions computed for such almost-rank-deficient matrices may +*> be less accurate due to a loss of numerical precision. *> *> *> The following options are provided: @@ -141,7 +150,7 @@ *> = 0: successful exit *> < 0: if INFO = -i, the i-th argument had an illegal value *> > 0: if INFO = i, the i-th diagonal element of the -*> triangular factor of A is zero, so that A does not have +*> triangular factor of A is exactly zero, so that A does not have *> full rank; the least squares solution could not be *> computed. *> \endverbatim From b7335217c138dce0e01a6ab9b8c9ce51f3299a47 Mon Sep 17 00:00:00 2001 From: GYT Date: Fri, 24 Nov 2023 19:15:41 +0100 Subject: [PATCH 7/8] Add notes to *GGLSE about how only exact rank-deficiency is checked --- SRC/cgglse.f | 14 ++++++++++++-- SRC/dgglse.f | 14 ++++++++++++-- SRC/sgglse.f | 14 ++++++++++++-- SRC/zgglse.f | 14 ++++++++++++-- 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/SRC/cgglse.f b/SRC/cgglse.f index 6fbd71d1ba..836d3496fa 100644 --- a/SRC/cgglse.f +++ b/SRC/cgglse.f @@ -52,6 +52,16 @@ *> 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. +*> *> \endverbatim * * Arguments: @@ -153,12 +163,12 @@ *> = 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 +*> 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 singular, so that +*> of the pair (B, A) is exactly singular, so that *> rank( (A) ) < N; the least squares solution could not *> ( (B) ) *> be computed. diff --git a/SRC/dgglse.f b/SRC/dgglse.f index 45e89eebe4..181a42373f 100644 --- a/SRC/dgglse.f +++ b/SRC/dgglse.f @@ -52,6 +52,16 @@ *> 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. +*> *> \endverbatim * * Arguments: @@ -153,12 +163,12 @@ *> = 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 +*> 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 singular, so that +*> of the pair (B, A) is exactly singular, so that *> rank( (A) ) < N; the least squares solution could not *> ( (B) ) *> be computed. diff --git a/SRC/sgglse.f b/SRC/sgglse.f index 527e7b3718..96cb5876e2 100644 --- a/SRC/sgglse.f +++ b/SRC/sgglse.f @@ -52,6 +52,16 @@ *> 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. +*> *> \endverbatim * * Arguments: @@ -153,12 +163,12 @@ *> = 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 +*> 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 singular, so that +*> of the pair (B, A) is exactly singular, so that *> rank( (A) ) < N; the least squares solution could not *> ( (B) ) *> be computed. diff --git a/SRC/zgglse.f b/SRC/zgglse.f index abefbae1e5..30e7783cc3 100644 --- a/SRC/zgglse.f +++ b/SRC/zgglse.f @@ -52,6 +52,16 @@ *> 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. +*> *> \endverbatim * * Arguments: @@ -153,12 +163,12 @@ *> = 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 +*> 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 singular, so that +*> of the pair (B, A) is exactly singular, so that *> rank( (A) ) < N; the least squares solution could not *> ( (B) ) *> be computed. From c3c505b1c74b95ffd73ffa85f39b4da5c1db1f9f Mon Sep 17 00:00:00 2001 From: GYT Date: Sun, 26 Nov 2023 18:48:01 +0100 Subject: [PATCH 8/8] Add notes to *GGGLM about how only exact rank-deficiency is checked --- SRC/cggglm.f | 14 ++++++++++++-- SRC/dggglm.f | 14 ++++++++++++-- SRC/sggglm.f | 14 ++++++++++++-- SRC/zggglm.f | 14 ++++++++++++-- 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/SRC/cggglm.f b/SRC/cggglm.f index 60828cf687..1e666a366e 100644 --- a/SRC/cggglm.f +++ b/SRC/cggglm.f @@ -61,6 +61,16 @@ *> x *> *> where inv(B) denotes the inverse of B. +*> +*> 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 QR +*> factorization of the pair (A, B) 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. +*> *> \endverbatim * * Arguments: @@ -159,12 +169,12 @@ *> = 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 +*> generalized QR factorization of the pair (A, B) is exactly *> 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 +*> factorization of the pair (A, B) is exactly singular, so that *> rank( A B ) < N; the least squares solution could not *> be computed. *> \endverbatim diff --git a/SRC/dggglm.f b/SRC/dggglm.f index 56a168415f..1fe366e73a 100644 --- a/SRC/dggglm.f +++ b/SRC/dggglm.f @@ -61,6 +61,16 @@ *> x *> *> where inv(B) denotes the inverse of B. +*> +*> 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 QR +*> factorization of the pair (A, B) 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. +*> *> \endverbatim * * Arguments: @@ -159,12 +169,12 @@ *> = 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 +*> generalized QR factorization of the pair (A, B) is exactly *> 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 +*> factorization of the pair (A, B) is exactly singular, so that *> rank( A B ) < N; the least squares solution could not *> be computed. *> \endverbatim diff --git a/SRC/sggglm.f b/SRC/sggglm.f index 52c59b8bf2..d7b3cb5d72 100644 --- a/SRC/sggglm.f +++ b/SRC/sggglm.f @@ -61,6 +61,16 @@ *> x *> *> where inv(B) denotes the inverse of B. +*> +*> 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 QR +*> factorization of the pair (A, B) 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. +*> *> \endverbatim * * Arguments: @@ -159,12 +169,12 @@ *> = 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 +*> generalized QR factorization of the pair (A, B) is exactly *> 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 +*> factorization of the pair (A, B) is exactly singular, so that *> rank( A B ) < N; the least squares solution could not *> be computed. *> \endverbatim diff --git a/SRC/zggglm.f b/SRC/zggglm.f index 6a7c3da5fe..830193664e 100644 --- a/SRC/zggglm.f +++ b/SRC/zggglm.f @@ -61,6 +61,16 @@ *> x *> *> where inv(B) denotes the inverse of B. +*> +*> 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 QR +*> factorization of the pair (A, B) 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. +*> *> \endverbatim * * Arguments: @@ -159,12 +169,12 @@ *> = 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 +*> generalized QR factorization of the pair (A, B) is exactly *> 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 +*> factorization of the pair (A, B) is exactly singular, so that *> rank( A B ) < N; the least squares solution could not *> be computed. *> \endverbatim