hpsvx(3)

okay bestie, welcome to the hpsvx(3) glow-up โœจ โ€” this is the Library Functions Manual page for the <rainbow>{hp,sp}svx</rainbow> crew, and the vibe is literally โ€œfactor and solve, expert.โ€ ๐Ÿ’…

โœจ NAME โœจ

hpsvx โ€” {hp,sp}svx: factor and solve, expert. ๐ŸŽ€


๐ŸŒธ SYNOPSIS ๐ŸŒธ

๐Ÿ’– Functions ๐Ÿ’–

  • chpsvx โ€” CHPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine chpsvx (fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx,
    rcond, ferr, berr, work, rwork, info)
  • cspsvx โ€” CSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine cspsvx (fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx,
    rcond, ferr, berr, work, rwork, info)
  • dspsvx โ€” DSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine dspsvx (fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx,
    rcond, ferr, berr, work, iwork, info)
  • sspsvx โ€” SSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine sspsvx (fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx,
    rcond, ferr, berr, work, iwork, info)
  • zhpsvx โ€” ZHPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine zhpsvx (fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx,
    rcond, ferr, berr, work, rwork, info)
  • zspsvx โ€” ZSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine zspsvx (fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx,
    rcond, ferr, berr, work, rwork, info)

๐Ÿ” Detailed Description ๐Ÿ”

This section is literally just a heading in the source, bestie โ€” the actual deets are living their best life in Function Documentation right below. ๐Ÿซถ


๐Ÿงฎ Function Documentation ๐Ÿงฎ

๐Ÿ’– subroutine chpsvx ๐Ÿ’–

subroutine chpsvx (character fact, character uplo, integer n, integer nrhs,
    complex, dimension( * ) ap, complex, dimension( * ) afp, integer,
    dimension( * ) ipiv, complex, dimension( ldb, * ) b, integer ldb,
    complex, dimension( ldx, * ) x, integer ldx, real rcond, real,
    dimension( * ) ferr, real, dimension( * ) berr, complex, dimension( * )
    work, real, dimension( * ) rwork, integer info)

CHPSVX computes the solution to system of linear equations A * X = B for OTHER matrices.

โœจ Purpose โœจ

CHPSVX uses the diagonal pivoting factorization A = U*D*U**H or A = L*D*L**H to compute the solution to a complex system of linear equations A * X = B, where A is an N-by-N Hermitian matrix stored in packed format and X and B are N-by-NRHS matrices.

Error bounds on the solution and a condition estimate are also provided.

๐ŸŽ€ Description ๐ŸŽ€

The following steps are performed:

  1. If FACT = 'N', the diagonal pivoting method is used to factor A as A = U * D * U**H, if UPLO = 'U', or A = L * D * L**H, if UPLO = 'L', where U (or L) is a product of permutation and unit upper (lower) triangular matrices and D is Hermitian and block diagonal with 1-by-1 and 2-by-2 diagonal blocks.
  2. If some D(i,i)=0, so that D is exactly singular, then the routine returns with INFO = i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. If the reciprocal of the condition number is less than machine precision, INFO = N+1 is returned as a warning, but the routine still goes on to solve for X and compute error bounds as described below.
  3. The system of equations is solved for X using the factored form of A.
  4. Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it.

๐Ÿฆ‹ Parameters ๐Ÿฆ‹

  • FACT โ€” FACT is CHARACTER*1. Specifies whether or not the factored form of A has been supplied on entry.
    • = 'F': On entry, AFP and IPIV contain the factored form of A. AFP and IPIV will not be modified.
    • = 'N': The matrix A will be copied to AFP and factored.
  • UPLO โ€” UPLO is CHARACTER*1.
    • = 'U': Upper triangle of A is stored.
    • = 'L': Lower triangle of A is stored.
  • N โ€” N is INTEGER. The number of linear equations, i.e., the order of the matrix A. N >= 0.
  • NRHS โ€” NRHS is INTEGER. The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0.
  • AP โ€” AP is COMPLEX array, dimension (N*(N+1)/2). The upper or lower triangle of the Hermitian matrix A, packed columnwise in a linear array. The j-th column of A is stored in the array AP as follows:
    • if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
    • if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

See below for further details.

  • AFP โ€” AFP is COMPLEX array, dimension (N*(N+1)/2).

If FACT = 'F', then AFP is an input argument and on entry contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**H or A = L*D*L**H as computed by CHPTRF, stored as a packed triangular matrix in the same storage format as A.

If FACT = 'N', then AFP is an output argument and on exit contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**H or A = L*D*L**H as computed by CHPTRF, stored as a packed triangular matrix in the same storage format as A.

  • IPIV โ€” IPIV is INTEGER array, dimension (N).

If FACT = 'F', then IPIV is an input argument and on entry contains details of the interchanges and the block structure of D, as determined by CHPTRF.

If IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block.

If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diagonal block.

If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.

If FACT = 'N', then IPIV is an output argument and on exit contains details of the interchanges and the block structure of D, as determined by CHPTRF.

  • B โ€” B is COMPLEX array, dimension (LDB,NRHS). The N-by-NRHS right hand side matrix B.
  • LDB โ€” LDB is INTEGER. The leading dimension of the array B. LDB >= max(1,N).
  • X โ€” X is COMPLEX array, dimension (LDX,NRHS). If INFO = 0 or INFO = N+1, the N-by-NRHS solution matrix X.
  • LDX โ€” LDX is INTEGER. The leading dimension of the array X. LDX >= max(1,N).
  • RCOND โ€” RCOND is REAL. The estimate of the reciprocal condition number of the matrix A. If RCOND is less than the machine precision (in particular, if RCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0.
  • FERR โ€” FERR is REAL array, dimension (NRHS). The estimated forward error bound for each solution vector X(j) (the j-th column of the solution matrix X). If XTRUE is the true solution corresponding to X(j), FERR(j) is an estimated upper bound for the magnitude of the largest element in (X(j) - XTRUE) divided by the magnitude of the largest element in X(j). The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error.
  • BERR โ€” BERR is REAL array, dimension (NRHS). The componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any element of A or B that makes X(j) an exact solution).
  • WORK โ€” WORK is COMPLEX array, dimension (2*N).
  • RWORK โ€” RWORK is REAL array, dimension (N).
  • INFO โ€” INFO is INTEGER.
    • = 0: successful exit
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: if INFO = i, and i is
      • <= N: D(i,i) is exactly zero. The factorization has been completed but the factor D is exactly singular, so the solution and error bounds could not be computed. RCOND = 0 is returned.
      • = N+1: D is nonsingular, but RCOND is less than machine precision, meaning that the matrix is singular to working precision. Nevertheless, the solution and error bounds are computed because there are a number of situations where the computed solution can be more accurate than the value of RCOND would suggest.
bestie, if RCOND is tiny or zero, that matrix is singular to working precision โ€” read the INFO tea before trusting the solve. ๐Ÿšจ๐Ÿ’…

๐Ÿ‘‘ Author ๐Ÿ‘‘

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

๐ŸŒˆ Further Details ๐ŸŒˆ

The packed storage scheme is illustrated by the following example when N = 4, UPLO = 'U':

Two-dimensional storage of the Hermitian matrix A:

    a11 a12 a13 a14
        a22 a23 a24
            a33 a34     (aij = conjg(aji))
                a44

Packed storage of the upper triangle of A:

AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]

Definition at line 275 of file chpsvx.f.

subroutine cspsvx

subroutine cspsvx (character fact, character uplo, integer n, integer nrhs,
    complex, dimension( * ) ap, complex, dimension( * ) afp, integer,
    dimension( * ) ipiv, complex, dimension( ldb, * ) b, integer ldb,
    complex, dimension( ldx, * ) x, integer ldx, real rcond, real,
    dimension( * ) ferr, real, dimension( * ) berr, complex, dimension( * )
    work, real, dimension( * ) rwork, integer info)

okay so bestie, CSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices ๐Ÿ’… (and yes the all-caps "OTHER" is doing main character energy, we respect it).

Purpose ๐Ÿ’–

!>
!> CSPSVX uses the diagonal pivoting factorization A = U*D*U**T or
!> A = L*D*L**T to compute the solution to a complex system of linear
!> equations A * X = B, where A is an N-by-N symmetric matrix stored
!> in packed format and X and B are N-by-NRHS matrices.
!>
!> Error bounds on the solution and a condition estimate are also
!> provided.
!>

Translation: CSPSVX uses the diagonal pivoting factorization A = U*D*U**T or A = L*D*L**T to solve a complex system of linear equations A * X = B, where A is an N-by-N symmetric matrix stored in packed format, and X and B are N-by-NRHS matrices. It also hands you error bounds on the solution plus a condition estimate. So generous, honestly ๐Ÿซถ.

Description ๐ŸŒธ

The following steps are performed:

  1. If FACT = 'N', the diagonal pivoting method is used to factor A as
A = U * D * U**T,  if UPLO = 'U', or
A = L * D * L**T,  if UPLO = 'L',

where U (or L) is a product of permutation and unit upper (lower) triangular matrices and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks.

  1. If some D(i,i)=0, so that D is exactly singular, then the routine returns with INFO = i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. If the reciprocal of the condition number is less than machine precision, INFO = N+1 is returned as a warning, but the routine still goes on to solve for X and compute error bounds as described below. (she literally warns you and then does the thing anyway, iconic)
  2. The system of equations is solved for X using the factored form of A.
  3. Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it.

โœจ Parameters โœจ

  • FACT โ€” is CHARACTER*1. Specifies whether or not the factored form of A has been supplied on entry.
    • = 'F': On entry, AFP and IPIV contain the factored form of A. AP, AFP and IPIV will not be modified.
    • = 'N': The matrix A will be copied to AFP and factored.
  • UPLO โ€” is CHARACTER*1.
    • = 'U': Upper triangle of A is stored;
    • = 'L': Lower triangle of A is stored.
  • N โ€” is INTEGER. The number of linear equations, i.e., the order of the matrix A. N >= 0.
  • NRHS โ€” is INTEGER. The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0.
  • AP โ€” is COMPLEX array, dimension (N*(N+1)/2). The upper or lower triangle of the symmetric matrix A, packed columnwise in a linear array. The j-th column of A is stored in the array AP as follows:
if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

See below for further details. ๐Ÿ‘€

  • AFP โ€” is COMPLEX array, dimension (N*(N+1)/2). If FACT = 'F', then AFP is an input argument and on entry contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed by CSPTRF, stored as a packed triangular matrix in the same storage format as A. If FACT = 'N', then AFP is an output argument and on exit contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed by CSPTRF, stored as a packed triangular matrix in the same storage format as A. (same storage format as A, she said, twice, because it matters ๐Ÿ’€)
  • IPIV โ€” is INTEGER array, dimension (N). If FACT = 'F', then IPIV is an input argument and on entry contains details of the interchanges and the block structure of D, as determined by CSPTRF. If IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block. If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block. ๐Ÿ”ฅ If FACT = 'N', then IPIV is an output argument and on exit contains details of the interchanges and the block structure of D, as determined by CSPTRF.
  • B โ€” is COMPLEX array, dimension (LDB,NRHS). The N-by-NRHS right hand side matrix B.
  • LDB โ€” is INTEGER. The leading dimension of the array B. LDB >= max(1,N).
  • X โ€” is COMPLEX array, dimension (LDX,NRHS). If INFO = 0 or INFO = N+1, the N-by-NRHS solution matrix X. (the payoff, the moment, the slay)
  • LDX โ€” is INTEGER. The leading dimension of the array X. LDX >= max(1,N).
  • RCOND โ€” is REAL. The estimate of the reciprocal condition number of the matrix A. If RCOND is less than the machine precision (in particular, if RCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0.
  • FERR โ€” is REAL array, dimension (NRHS). The estimated forward error bound for each solution vector X(j) (the j-th column of the solution matrix X). If XTRUE is the true solution corresponding to X(j), FERR(j) is an estimated upper bound for the magnitude of the largest element in (X(j) - XTRUE) divided by the magnitude of the largest element in X(j). The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error. (she's a lil dramatic, she overestimates, we love her for it)
  • BERR โ€” is REAL array, dimension (NRHS). The componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any element of A or B that makes X(j) an exact solution).
  • WORK โ€” is COMPLEX array, dimension (2*N).
  • RWORK โ€” is REAL array, dimension (N).
  • INFO โ€” is INTEGER.
    • = 0: successful exit
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: if INFO = i, and i is
      • <= N: D(i,i) is exactly zero. The factorization has been completed but the factor D is exactly singular, so the solution and error bounds could not be computed. RCOND = 0 is returned.
      • = N+1: D is nonsingular, but RCOND is less than machine precision, meaning that the matrix is singular to working precision. Nevertheless, the solution and error bounds are computed because there are a number of situations where the computed solution can be more accurate than the value of RCOND would suggest. (she computes it anyway bc sometimes the vibe check is wrong, no cap)

Author ๐Ÿ‘‘

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Further Details: ๐Ÿฆ‹

The packed storage scheme is illustrated by the following example when N = 4, UPLO = 'U':

Two-dimensional storage of the symmetric matrix A:

   a11 a12 a13 a14
       a22 a23 a24
           a33 a34     (aij = aji)
               a44

Packed storage of the upper triangle of A:

AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]

see how she just... folds it up? diagonal by diagonal? obsessed ๐Ÿ’–

Definition at line 275 of file cspsvx.f.


subroutine dspsvx

subroutine dspsvx (character fact, character uplo, integer n, integer nrhs,
    double precision, dimension( * ) ap, double precision, dimension( * )
    afp, integer, dimension( * ) ipiv, double precision, dimension( ldb, * )
    b, integer ldb, double precision, dimension( ldx, * ) x, integer ldx,
    double precision rcond, double precision, dimension( * ) ferr, double
    precision, dimension( * ) berr, double precision, dimension( * ) work,
    integer, dimension( * ) iwork, integer info)

DSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices โœจ โ€” yes it's the real-valued sibling of the one above, same energy, different precision.

Purpose ๐Ÿ’œ

!>
!> DSPSVX uses the diagonal pivoting factorization A = U*D*U**T or
!> A = L*D*L**T to compute the solution to a real system of linear
!> equations A * X = B, where A is an N-by-N symmetric matrix stored
!> in packed format and X and B are N-by-NRHS matrices.
!>
!> Error bounds on the solution and a condition estimate are also
!> provided.
!>

so DSPSVX pulls the same diagonal pivoting factorization A = U*D*U**T or A = L*D*L**T to solve a real system A * X = B, where A is an N-by-N symmetric matrix in packed format and X and B are N-by-NRHS matrices. Error bounds and a condition estimate on the solution? Also provided. She came prepared ๐ŸŽ€.

Description ๐ŸŒˆ

(hold that thought โ€” the steps are literally right there, next part, don't come for me ๐Ÿ˜ญ)

okay so the step-by-step for DSPSVX is giving main character energy:

  1. If FACT = 'N', the diagonal pivoting method is used to factor A as
A = U * D * U**T,  if UPLO = 'U', or
A = L * D * L**T,  if UPLO = 'L',

where U (or L) is a product of permutation and unit upper (lower) triangular matrices and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks.

  1. If some D(i,i)=0, so that D is exactly singular, then the routine returns with INFO = i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. If the reciprocal of the condition number is less than machine precision, INFO = N+1 is returned as a warning, but the routine still goes on to solve for X and compute error bounds as described below.
  2. The system of equations is solved for X using the factored form of A.
  3. Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it.

๐ŸŒธ Parameters ๐ŸŒธ

  • FACT โ€” FACT is CHARACTER*1. Specifies whether or not the factored form of A has been supplied on entry.
    • = 'F': On entry, AFP and IPIV contain the factored form of A. AP, AFP and IPIV will not be modified.
    • = 'N': The matrix A will be copied to AFP and factored.
  • UPLO โ€” UPLO is CHARACTER*1.
    • = 'U': Upper triangle of A is stored;
    • = 'L': Lower triangle of A is stored.
  • N โ€” N is INTEGER. The number of linear equations, i.e., the order of the matrix A. N >= 0.
  • NRHS โ€” NRHS is INTEGER. The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0.
  • AP โ€” AP is DOUBLE PRECISION array, dimension (N*(N+1)/2). The upper or lower triangle of the symmetric matrix A, packed columnwise in a linear array. The j-th column of A is stored in the array AP as follows:
    • if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
    • if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

See below for further details.

  • AFP โ€” AFP is DOUBLE PRECISION array, dimension (N*(N+1)/2).
    • If FACT = 'F', then AFP is an input argument and on entry contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed by DSPTRF, stored as a packed triangular matrix in the same storage format as A.
    • If FACT = 'N', then AFP is an output argument and on exit contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed by DSPTRF, stored as a packed triangular matrix in the same storage format as A.
  • IPIV โ€” IPIV is INTEGER array, dimension (N).
    • If FACT = 'F', then IPIV is an input argument and on entry contains details of the interchanges and the block structure of D, as determined by DSPTRF.
    • If IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block.
    • If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
    • If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
    • If FACT = 'N', then IPIV is an output argument and on exit contains details of the interchanges and the block structure of D, as determined by DSPTRF.
  • B โ€” B is DOUBLE PRECISION array, dimension (LDB,NRHS). The N-by-NRHS right hand side matrix B.
  • LDB โ€” LDB is INTEGER. The leading dimension of the array B. LDB >= max(1,N).
  • X โ€” X is DOUBLE PRECISION array, dimension (LDX,NRHS). If INFO = 0 or INFO = N+1, the N-by-NRHS solution matrix X.
  • LDX โ€” LDX is INTEGER. The leading dimension of the array X. LDX >= max(1,N).
  • RCOND โ€” RCOND is DOUBLE PRECISION. The estimate of the reciprocal condition number of the matrix A. If RCOND is less than the machine precision (in particular, if RCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0.
  • FERR โ€” FERR is DOUBLE PRECISION array, dimension (NRHS). The estimated forward error bound for each solution vector X(j) (the j-th column of the solution matrix X). If XTRUE is the true solution corresponding to X(j), FERR(j) is an estimated upper bound for the magnitude of the largest element in (X(j) - XTRUE) divided by the magnitude of the largest element in X(j). The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error.
  • BERR โ€” BERR is DOUBLE PRECISION array, dimension (NRHS). The componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any element of A or B that makes X(j) an exact solution).
  • WORK โ€” WORK is DOUBLE PRECISION array, dimension (3*N).
  • IWORK โ€” IWORK is INTEGER array, dimension (N).
  • INFO โ€” INFO is INTEGER.
    • = 0: successful exit
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: if INFO = i, and i is
      • <= N: D(i,i) is exactly zero. The factorization has been completed but the factor D is exactly singular, so the solution and error bounds could not be computed. RCOND = 0 is returned.
      • = N+1: D is nonsingular, but RCOND is less than machine precision, meaning that the matrix is singular to working precision. Nevertheless, the solution and error bounds are computed because there are a number of situations where the computed solution can be more accurate than the value of RCOND would suggest.

๐Ÿ’– Author ๐Ÿ’–

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

๐ŸŒˆ Further Details ๐ŸŒˆ

The packed storage scheme is illustrated by the following example when N = 4, UPLO = 'U':

Two-dimensional storage of the symmetric matrix A:

   a11 a12 a13 a14
       a22 a23 a24
           a33 a34     (aij = aji)
               a44

Packed storage of the upper triangle of A:

AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]

Definition at line 274 of file dspsvx.f.


๐Ÿงš subroutine sspsvx ๐Ÿงš

   subroutine sspsvx (character fact, character uplo, integer n, integer nrhs,
       real, dimension( * ) ap, real, dimension( * ) afp, integer, dimension( *
       ) ipiv, real, dimension( ldb, * ) b, integer ldb, real, dimension( ldx,
       * ) x, integer ldx, real rcond, real, dimension( * ) ferr, real,
       dimension( * ) berr, real, dimension( * ) work, integer, dimension( * )
       iwork, integer info)

SSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices periodt.

โœจ Purpose โœจ

SSPSVX uses the diagonal pivoting factorization A = U*D*U**T or A = L*D*L**T to compute the solution to a real system of linear equations A * X = B, where A is an N-by-N symmetric matrix stored in packed format and X and B are N-by-NRHS matrices.

Error bounds on the solution and a condition estimate are also provided.

๐ŸŽ€ Description ๐ŸŽ€

The following steps are performed:

  1. If FACT = 'N', the diagonal pivoting method is used to factor A as
A = U * D * U**T,  if UPLO = 'U', or
A = L * D * L**T,  if UPLO = 'L',

where U (or L) is a product of permutation and unit upper (lower) triangular matrices and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks.

  1. If some D(i,i)=0, so that D is exactly singular, then the routine returns with INFO = i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. If the reciprocal of the condition number is less than machine precision, INFO = N+1 is returned as a warning, but the routine still goes on to solve for X and compute error bounds as described below.
  2. The system of equations is solved for X using the factored form of A.
  3. Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it.

๐Ÿ“ Parameters ๐Ÿ“

  • FACT โ€” FACT is CHARACTER*1. Specifies whether or not the factored form of A has been supplied on entry.
    • = 'F': On entry, AFP and IPIV contain the factored form of A. AP, AFP and IPIV will not be modified.
    • = 'N': The matrix A will be copied to AFP and factored.
  • UPLO
  • UPLO โ€” ok so UPLO is a CHARACTER*1, and it's literally just picking a triangle. 'U' means the upper triangle of A is stored; 'L' means the lower triangle of A is stored. That's the whole vibe ๐Ÿ’…
  • N โ€” N is INTEGER, bestie. It's the number of linear equations, i.e., the order of the matrix A. And the rule is N >= 0 โ€” no negative nonsense ๐Ÿซถ
  • NRHS โ€” NRHS is INTEGER too. It's the number of right hand sides, i.e., the number of columns of the matrices B and X. Requirement: NRHS >= 0 โœจ
  • AP โ€” AP is a REAL array, dimension (N*(N+1)/2). It's the upper or lower triangle of the symmetric matrix A, packed columnwise in a linear array. The j-th column of A is stored in the array AP as follows:
    • if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
    • if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. See below for further details ๐Ÿ‘€
  • AFP โ€” AFP is a REAL array, dimension (N*(N+1)/2). If FACT = 'F', then AFP is an input argument and on entry contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed by SSPTRF, stored as a packed triangular matrix in the same storage format as A.

If FACT = 'N', then AFP is an output argument and on exit contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed by SSPTRF, stored as a packed triangular matrix in the same storage format as A. Same energy, different direction ๐Ÿ˜Œ

  • IPIV โ€” IPIV is an INTEGER array, dimension (N). If FACT = 'F', then IPIV is an input argument and on entry contains details of the interchanges and the block structure of D, as determined by SSPTRF.
    • If IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block.
    • If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
    • If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.

If FACT = 'N', then IPIV is an output argument and on exit contains details of the interchanges and the block structure of D, as determined by SSPTRF. Basically it's the receipts of what got swapped ๐Ÿ”

  • B โ€” B is a REAL array, dimension (LDB,NRHS). It's the N-by-NRHS right hand side matrix B. The main character of the equation, lowkey ๐Ÿ’–
  • LDB โ€” LDB is INTEGER. It's the leading dimension of the array B, and you need LDB >= max(1,N). Respect the bounds, bestie ๐Ÿซก
  • X โ€” X is a REAL array, dimension (LDX,NRHS). If INFO = 0 or INFO = N+1, this is the N-by-NRHS solution matrix X. The moment we've all been waiting for โœจ
  • LDX โ€” LDX is INTEGER. It's the leading dimension of the array X, and the rule is LDX >= max(1,N). Keep it valid or it's giving illegal argument energy ๐Ÿ˜ญ
  • RCOND โ€” RCOND is REAL. It's the estimate of the reciprocal condition number of the matrix A. If RCOND is less than the machine precision (in particular, if RCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0.
So if RCOND is tiny or zero, that's your red flag era. The routine is literally telling you the matrix is singular to working precision, and INFO > 0 is the clue ๐Ÿ’€
  • FERR โ€” FERR is a REAL array, dimension (NRHS). It's the estimated forward error bound for each solution vector X(j) (the j-th column of the solution matrix X). If XTRUE is the true solution corresponding to X(j), FERR(j) is an estimated upper bound for the magnitude of the largest element in (X(j) - XTRUE) divided by the magnitude of the largest element in X(j). The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error. So it's a little dramatic, but in a helpful way ๐Ÿ’…
  • BERR โ€” BERR is a REAL array, dimension (NRHS). It's the componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any element of A or B that makes X(j) an exact solution). Tiny number, big meaning ๐ŸŽ€
  • WORK โ€” WORK is a REAL array, dimension (3*N). It's the workspace, doing background support like a true bestie ๐Ÿซถ
  • IWORK โ€” IWORK is an INTEGER array, dimension (N). More workspace, but integer flavored โœจ
  • INFO โ€” INFO is INTEGER, and this is the status report:
    • = 0: successful exit. Slay.
    • < 0: if INFO = -i, the i-th argument had an illegal value. Not iconic.
    • > 0: if INFO = i, and i is
      • <= N: D(i,i) is exactly zero. The factorization has been completed but the factor D is exactly singular, so the solution and error bounds could not be computed. RCOND = 0 is returned.
      • = N+1: D is nonsingular, but RCOND is less than machine precision, meaning that the matrix is singular to working precision. Nevertheless, the solution and error bounds are computed because there are a number of situations where the computed solution can be more accurate than the value of RCOND would suggest.
The INFO = N+1 case is giving "warning, but we still pulled through" energy. The routine still computes the solution and error bounds because sometimes the computed solution is more accurate than RCOND would suggest ๐Ÿ”ฅ

๐Ÿ‘‘ Author ๐Ÿ‘‘

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

๐Ÿ” Further Details: ๐Ÿ”

The packed storage scheme is illustrated by the following example when N = 4, UPLO = 'U':

Two-dimensional storage of the symmetric matrix A:

     a11 a12 a13 a14
         a22 a23 a24
             a33 a34     (aij = aji)
                 a44

Packed storage of the upper triangle of A:

AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]

Definition at line 274 of file sspsvx.f.


๐Ÿฆ‹ subroutine zhpsvx ๐Ÿฆ‹

   subroutine zhpsvx (character fact, character uplo, integer n, integer nrhs,
       complex*16, dimension( * ) ap, complex*16, dimension( * ) afp, integer,
       dimension( * ) ipiv, complex*16, dimension( ldb, * ) b, integer ldb,
       complex*16, dimension( ldx, * ) x, integer ldx, double precision rcond,
       double precision, dimension( * ) ferr, double precision, dimension( * )
       berr, complex*16, dimension( * ) work, double precision, dimension( * )
       rwork, integer info)

ZHPSVX computes the solution to system of linear equations A * X = B for OTHER matrices.

๐ŸŽฏ Purpose ๐ŸŽฏ

ZHPSVX uses the diagonal pivoting factorization A = U*D*U**H or A = L*D*L**H to compute the solution to a complex system of linear equations A * X = B, where A is an N-by-N Hermitian matrix stored in packed format and X and B are N-by-NRHS matrices.

Error bounds on the solution and a condition estimate are also provided. Yes, it's thorough, and we love that for us ๐Ÿ’–

๐ŸŒˆ Description ๐ŸŒˆ

The following steps are performed:

  1. If FACT = 'N', the diagonal pivoting method is used to factor A as
A = U * D * U**H,  if UPLO = 'U', or
A = L * D * L**H,  if UPLO = 'L',

where U (or L) is a product of permutation and unit upper (lower) triangular matrices and D is Hermitian and block diagonal with 1-by-1 and 2-by-2 diagonal blocks.

  1. If some D(i,i)=0, so that D is exactly singular, then the routine returns with INFO = i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. If the reciprocal of the condition number is less than machine precision, INFO = N+1 is returned as a warning, but the routine still goes on to solve for X and compute error bounds as described below.
  2. The system of equations is solved for X using the factored form of A.
  3. Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it.

๐Ÿงพ Parameters ๐Ÿงพ

  • FACT โ€” FACT is CHARACTER*1. It specifies whether or not the factored form of A has been supplied on entry.
    • = 'F': On entry, AFP and IPIV contain the factored form of A. AFP and IPIV will not be modified.
    • = 'N': The matrix A will be copied to AFP and factored. Pick your lane, bestie ๐Ÿ’…
  • UPLO โ€” UPLO is CHARACTER*1.
    • = 'U': Upper triangle of A is stored;
    • = 'L': Lower triangle of A is stored. Triangle choice, but make it Hermitian โœจ
  • N โ€” N is INTEGER. It's the number of linear equations, i.e., the order of the matrix A. N >= 0, always ๐Ÿซถ
  • NRHS โ€” NRHS is INTEGER. It's the number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0, no cap ๐Ÿ’ฏ
  • AP โ€” AP is a COMPLEX*16 array, dimension (N*(N+1)/2). It's the upper or lower triangle of the Hermitian matrix A, packed columnwise in a linear array. The j-th column of A is stored in the array AP as follows:
    • if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
    • if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. See below for further details ๐Ÿ‘€
  • AFP โ€”
  • AFP โ€” okay so AFP is a COMPLEX*16 array, dimension (N*(N+1)/2). If FACT = 'F', then AFP is an input argument and on entry it contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**H or A = L*D*L**H as computed by ZHPTRF, stored as a packed triangular matrix in the same storage format as A. If FACT = 'N', then AFP is an output argument and on exit it contains that same block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**H or A = L*D*L**H as computed by ZHPTRF, stored as a packed triangular matrix in the same storage format as A. slay, storage format twins ๐Ÿ’…
  • IPIV โ€” IPIV is an INTEGER array, dimension (N). If FACT = 'F', then IPIV is an input argument and on entry it contains details of the interchanges and the block structure of D, as determined by ZHPTRF. iykyk, this is the receipts ๐Ÿงพ
    • If IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block.
    • If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
    • If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
    • If FACT = 'N', then IPIV is an output argument and on exit it contains details of the interchanges and the block structure of D, as determined by ZHPTRF.
  • B โ€” B is a COMPLEX*16 array, dimension (LDB,NRHS). It's the N-by-NRHS right hand side matrix B. the main character of the equation, honestly ๐Ÿซถ
  • LDB โ€” LDB is INTEGER. It's the leading dimension of the array B, and LDB >= max(1,N). respect the leading dimension or catch hands ๐Ÿซต
  • X โ€” X is a COMPLEX*16 array, dimension (LDX,NRHS). If INFO = 0 or INFO = N+1, this is the N-by-NRHS solution matrix X. the answer era โœจ
  • LDX โ€” LDX is INTEGER. It's the leading dimension of the array X, and LDX >= max(1,N). same energy as LDB, no cap ๐Ÿ‘
  • RCOND โ€” RCOND is DOUBLE PRECISION. It's the estimate of the reciprocal condition number of the matrix A. If RCOND is less than the machine precision (in particular, if RCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0. bestie, that's the โ€œuh ohโ€ signal ๐Ÿšจ
  • FERR โ€” FERR is a DOUBLE PRECISION array, dimension (NRHS). It's the estimated forward error bound for each solution vector X(j) (the j-th column of the solution matrix X). If XTRUE is the true solution corresponding to X(j), FERR(j) is an estimated upper bound for the magnitude of the largest element in (X(j) - XTRUE) divided by the magnitude of the largest element in X(j). The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error. generous king, giving us an upper bound ๐Ÿ’œ
  • BERR โ€” BERR is a DOUBLE PRECISION array, dimension (NRHS). It's the componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any element of A or B that makes X(j) an exact solution). backward error but make it fashion ๐Ÿ’ซ
  • WORK โ€” WORK is a COMPLEX*16 array, dimension (2*N). scratch space, doing behind-the-scenes work ๐Ÿ› ๏ธ
  • RWORK โ€” RWORK is a DOUBLE PRECISION array, dimension (N). more scratch space, real-valued this time ๐ŸŽ€
  • INFO โ€” INFO is INTEGER. the vibe check at the end ๐Ÿ’…
    • = 0: successful exit
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: if INFO = i, and i is:
      • <= N: D(i,i) is exactly zero. The factorization has been completed but the factor D is exactly singular, so the solution and error bounds could not be computed. RCOND = 0 is returned.
      • = N+1: D is nonsingular, but RCOND is less than machine precision, meaning that the matrix is singular to working precision. Nevertheless, the solution and error bounds are computed because there are a number of situations where the computed solution can be more accurate than the value of RCOND would suggest. plot twist: sometimes the โ€œbadโ€ condition number still eats ๐Ÿ˜ญ๐Ÿ”ฅ

Author ๐Ÿซถ

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

shoutout to the Unix aunties and uncles who wrote this down, fr fr ๐ŸŒฟ

Further Details: ๐ŸŒธ

The packed storage scheme is illustrated by the following example when N = 4, UPLO = 'U':

Two-dimensional storage of the Hermitian matrix A:

   a11 a12 a13 a14
       a22 a23 a24
           a33 a34     (aij = conjg(aji))
               a44

Packed storage of the upper triangle of A:

AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]

visual learner moment: that's the whole packed-storage wig in one example ๐ŸŽ€

Definition at line 275 of file zhpsvx.f.


๐Ÿฆ‹ subroutine zspsvx ๐Ÿฆ‹

subroutine zspsvx (character fact, character uplo, integer n, integer nrhs,
    complex*16, dimension( * ) ap, complex*16, dimension( * ) afp, integer,
    dimension( * ) ipiv, complex*16, dimension( ldb, * ) b, integer ldb,
    complex*16, dimension( ldx, * ) x, integer ldx, double precision rcond,
    double precision, dimension( * ) ferr, double precision, dimension( * )
    berr, complex*16, dimension( * ) work, double precision, dimension( * )
    rwork, integer info)

ZSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices. โ€œOTHER matricesโ€ is giving mysterious side quest, but okay ๐Ÿ‘€

๐ŸŽ€ Purpose: ๐ŸŽ€

ZSPSVX uses the diagonal pivoting factorization A = U*D*U**T or A = L*D*L**T to compute the solution to a complex system of linear equations A * X = B, where A is an N-by-N symmetric matrix stored in packed format and X and B are N-by-NRHS matrices.

Error bounds on the solution and a condition estimate are also provided. accuracy? we love her ๐Ÿ’–

๐Ÿ’… Description: ๐Ÿ’…

The following steps are performed:

  1. If FACT = 'N', the diagonal pivoting method is used to factor A as A = U * D * U**T, if UPLO = 'U', or A = L * D * L**T, if UPLO = 'L', where U (or L) is a product of permutation and unit upper (lower) triangular matrices and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks. block diagonal D is the moment, honestly ๐Ÿงฉ
  2. If some D(i,i)=0, so that D is exactly singular, then the routine returns with INFO = i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. If the reciprocal of the condition number is less than machine precision, INFO = N+1 is returned as a warning, but the routine still goes on to solve for X and compute error bounds as described below. warning bestie: singular D means no solution/error bounds, periodt ๐Ÿšซ
  3. The system of equations is solved for X using the factored form of A.
  4. Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it. glow-up step: refine, refine, refine ๐Ÿ’…

โœจ Parameters โœจ

  • FACT โ€” FACT is CHARACTER*1. It specifies whether or not the factored form of A has been supplied on entry.
    • = 'F': On entry, AFP and IPIV contain the factored form of A. AP, AFP and IPIV will not be modified.
    • = 'N': The matrix A will be copied to AFP and factored.
  • UPLO โ€” UPLO is CHARACTER*1.
    • = 'U': Upper triangle of A is stored.
    • = 'L': Lower triangle of A is stored.
  • N โ€” N is INTEGER. It's the number of linear equations, i.e., the order of the matrix A. N >= 0.
  • NRHS โ€” NRHS is INTEGER. It's the number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0.
  • AP โ€” AP is a COMPLEX*16 array, dimension (N*(N+1)/2). It's the upper or lower triangle of the symmetric matrix A, packed columnwise in a linear array. The j-th column of A is stored in the array AP as follows:
    • if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
    • if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

See below for further details. packed columnwise, iconic storage behavior ๐Ÿ“

  • AFP โ€” AFP is a COMPLEX*16 array, dimension (N*(N+1)/2). If FACT = 'F', then AFP is an input argument and on entry it contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed by ZSPTRF, stored as a packed triangular matrix in the same storage format as A. If FACT = 'N', then AFP is an output argument and on exit it contains the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed by ZSPTRF, stored as a packed triangular matrix in the same storage format as A. ZSPTRF said โ€œI'll handle the factorization,โ€ and honestly? she did ๐Ÿ’œ
  • IPIV

okay bestie, picking up right where we left off with IPIV โ€” no cap, this one's a little extra ๐Ÿ’…

  • IPIV โ€” INTEGER array, dimension (N). If FACT = 'F', then IPIV is an input argument and on entry contains details of the interchanges and the block structure of D, as determined by ZSPTRF. If IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block. If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.

If FACT = 'N', then IPIV is an output argument and on exit contains details of the interchanges and the block structure of D, as determined by ZSPTRF. ๐Ÿซถ

  • B โ€” COMPLEX*16 array, dimension (LDB,NRHS). The N-by-NRHS right hand side matrix B. ๐Ÿ’–
  • LDB โ€” INTEGER. The leading dimension of the array B. LDB >= max(1,N). slay, keep it legal โœจ
  • X โ€” COMPLEX*16 array, dimension (LDX,NRHS). If INFO = 0 or INFO = N+1, the N-by-NRHS solution matrix X. ๐ŸŒธ
  • LDX โ€” INTEGER. The leading dimension of the array X. LDX >= max(1,N). periodt ๐Ÿ’…
  • RCOND โ€” DOUBLE PRECISION. The estimate of the reciprocal condition number of the matrix A. If RCOND is less than the machine precision (in particular, if RCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0. lowkey important ๐Ÿšจ
  • FERR โ€” DOUBLE PRECISION array, dimension (NRHS). The estimated forward error bound for each solution vector X(j) (the j-th column of the solution matrix X). If XTRUE is the true solution corresponding to X(j), FERR(j) is an estimated upper bound for the magnitude of the largest element in (X(j) - XTRUE) divided by the magnitude of the largest element in X(j). The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error. ngl, it's giving "trust but verify" ๐Ÿ˜ญ
  • BERR โ€” DOUBLE PRECISION array, dimension (NRHS). The componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any element of A or B that makes X(j) an exact solution). ๐ŸŽ€
  • WORK โ€” COMPLEX*16 array, dimension (2*N). ๐Ÿ’œ
  • RWORK โ€” DOUBLE PRECISION array, dimension (N). ๐Ÿฆ‹
  • INFO โ€” INTEGER.
    • = 0: successful exit โœ…
    • < 0: if INFO = -i, the i-th argument had an illegal value ๐Ÿ™ˆ
    • > 0: if INFO = i, and i is
      • <= N: D(i,i) is exactly zero. The factorization has been completed but the factor D is exactly singular, so the solution and error bounds could not be computed. RCOND = 0 is returned. ๐Ÿ’€
      • = N+1: D is nonsingular, but RCOND is less than machine precision, meaning that the matrix is singular to working precision. Nevertheless, the solution and error bounds are computed because there are a number of situations where the computed solution can be more accurate than the value of RCOND would suggest. not me being dramatic but this is actually iconic ๐Ÿ”ฅ

Author ๐Ÿ‘‘

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.


Further Details: ๐Ÿงš

The packed storage scheme is illustrated by the following example when N = 4, UPLO = 'U':

Two-dimensional storage of the symmetric matrix A:

a11 a12 a13 a14
    a22 a23 a24
        a33 a34     (aij = aji)
            a44

Packed storage of the upper triangle of A:

AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]

see? it's literally just the upper triangle tucked into one cute lil array ๐ŸŽ€โœจ


Definition at line 275 of file zspsvx.f.

Author (again, but make it Doxygen) ๐Ÿ’ป

Generated automatically by Doxygen for LAPACK from the source code.


and that's the whole entire page bestie, no cap ๐Ÿซถ โ€” straight from LAPACK, Version 3.12.0, hpsvx(3), generated with love (and Doxygen). byeeee ๐Ÿ’…โœจ

๐Ÿ“ฆ where this page comes from