realPOsolve(3)
β¨ realPOsolve(3) β LAPACK β¨
okay so bestie, welcome to realPOsolve(3) from LAPACK π this page is all about the real solve driver functions for PO matrices, and it's literally giving math girlboss energy. no cap.
π NAME π
realPOsolve - real π«Ά
π SYNOPSIS π
Functions
subroutine sposv (UPLO, N, NRHS, A, LDA, B, LDB, INFO)β SPOSV computes the solution to system of linear equationsA * X = BforPOmatrices β¨subroutine sposvx (FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, EQUED, S, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, IWORK, INFO)β SPOSVX computes the solution to system of linear equationsA * X = BforPOmatrices πsubroutine sposvxx (FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, EQUED, S, B, LDB, X, LDX, RCOND, RPVGRW, BERR, N_ERR_BNDS, ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS, WORK, IWORK, INFO)β SPOSVXX computes the solution to system of linear equationsA * X = BforPOmatrices π
π«Ά Detailed Description π«Ά
This is the group of real solve driver functions for PO matrices. periodt π
π₯ Function Documentation π₯
subroutine sposv (character UPLO, integer N, integer NRHS, real, dimension( lda, * ) A, integer LDA, real, dimension( ldb, * ) B, integer LDB, integer INFO)
subroutine sposv (character UPLO, integer N, integer NRHS, real, dimension(
lda, * ) A, integer LDA, real, dimension( ldb, * ) B, integer LDB,
integer INFO)
SPOSV computes the solution to system of linear equations A * X = B for PO matrices β¨
Purpose
SPOSV computes the solution to a real system of linear equations A * X = B, where A is an N-by-N symmetric positive definite matrix and X and B are N-by-NRHS matrices.
The Cholesky decomposition is used to factor A as A = U**T* U, if UPLO = 'U', or A = L * L**T, if UPLO = 'L', where U is an upper triangular matrix and L is a lower triangular matrix. The factored form of A is then used to solve the system of equations A * X = B. π
Parameters
UPLOβUPLOisCHARACTER*1='U': Upper triangle ofAis stored; ='L': Lower triangle ofAis stored.NβNisINTEGERThe number of linear equations, i.e., the order of the matrixA.N >= 0.NRHSβNRHSisINTEGERThe number of right hand sides, i.e., the number of columns of the matrixB.NRHS >= 0.AβAisREALarray, dimension(LDA,N)On entry, the symmetric matrixA. IfUPLO = 'U', the leadingN-by-Nupper triangular part ofAcontains the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced. IfUPLO = 'L', the leadingN-by-Nlower triangular part ofAcontains the lower triangular part of the matrixA, and the strictly upper triangular part ofAis not referenced.
On exit, if INFO = 0, the factor U or L from the Cholesky factorization A = U**T*U or A = L*L**T.
LDAβLDAisINTEGERThe leading dimension of the arrayA.LDA >= max(1,N).BβBisREALarray, dimension(LDB,NRHS)On entry, theN-by-NRHSright hand side matrixB. On exit, ifINFO = 0, theN-by-NRHSsolution matrixX.LDBβLDBisINTEGERThe leading dimension of the arrayB.LDB >= max(1,N).INFOβINFOisINTEGER=0: successful exit <0: ifINFO = -i, thei-th argument had an illegal value
0: ifINFO = i, the leading minor of orderiofAis not positive definite, so the factorization could not be completed, and the solution has not been computed.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
subroutine sposvx (character FACT, character UPLO, integer N, integer NRHS, real, dimension( lda, * ) A, integer LDA, real, dimension( ldaf, * ) AF, integer LDAF, character EQUED, real, dimension( * ) S, 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)
subroutine sposvx (character FACT, character UPLO, integer N, integer NRHS,
real, dimension( lda, * ) A, integer LDA, real, dimension( ldaf, * ) AF,
integer LDAF, character EQUED, real, dimension( * ) S, 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)
SPOSVX computes the solution to system of linear equations A * X = B for PO matrices π
Purpose
SPOSVX uses the Cholesky factorization A = U**T*U or A = L*L**T to compute the solution to a real system of linear equations A * X = B, where A is an N-by-N symmetric positive definite matrix 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:
- If
FACT = 'E', real scaling factors are computed to equilibrate the system:diag(S) * A * diag(S) * inv(diag(S)) * X = diag(S) * BWhether or not the system will be equilibrated depends on the scaling of the matrixA, but if equilibration is used,Ais overwritten bydiag(S)*A*diag(S)andBbydiag(S)*B. - If
FACT = 'N'or'E', the Cholesky decomposition is used to factor the matrixA(after equilibration ifFACT = 'E') asA = U**T* U, ifUPLO = 'U', orA = L * L**T, ifUPLO = 'L', whereUis an upper triangular matrix andLis a lower triangular matrix. - If the leading
i-by-iprincipal minor is not positive definite, then the routine returns withINFO = i. Otherwise, the factored form ofAis used to estimate the condition number of the matrixA. If the reciprocal of the condition number is less than machine precision,INFO = N+1is returned as a warning, but the routine still goes on to solve forXand compute error bounds as described below. - The system of equations is solved for
Xusing the factored form ofA. - Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it.
- If equilibration was used, the matrix
Xis premultiplied bydiag(S)so that it solves the original system before equilibration.
Parameters
FACTβFACTisCHARACTER*1Specifies whether or not the factored form of the matrixAis supplied on entry, and if not, whether the matrixAshould be equilibrated before it is factored. ='F': On entry,AFcontains the factored form ofA. IfEQUED = 'Y', the matrixAhas been equilibrated with scaling factors given byS.AandAFwill not be modified. ='N': The matrixAwill be copied toAFand factored. ='E': The matrixAwill be equilibrated if necessary, then copied toAFand factored.UPLOβUPLOisCHARACTER*1='U': Upper triangle ofAis stored; ='L': Lower triangle ofAis stored.NβNisINTEGERThe number of linear equations, i.e., the order of the matrixA.N >= 0.NRHSβNRHSisINTEGERThe number of right hand sides, i.e., the number of columns of the matricesBandX.NRHS >= 0.AβAisREALarray, dimension(LDA,N)On entry, the symmetric matrixA, except ifFACT = 'F'andEQUED = 'Y', thenAmust contain the equilibrated matrixdiag(S)*A*diag(S). IfUPLO = 'U', the leadingN-by-Nupper triangular part ofAcontains the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced. IfUPLO = 'L', the leadingN-by-Nlower triangular part ofAcontains the lower triangular part of the matrixA, and the strictly upper triangular part ofAis not referenced.Ais not modified ifFACT = 'F'or'N', or ifFACT = 'E'andEQUED = 'N'on exit.
On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by diag(S)*A*diag(S).
LDAβLDAisINTEGERThe leading dimension of the arrayA.LDA >= max(1,N).AFβAFisREALarray, dimension(LDAF,N)IfFACT = 'F', thenAFis an input argument and on entry contains the triangular factorUorLfrom the Cholesky factorizationA = U**T*UorA = L*L**T, in the same storage format asA. IfEQUED .ne. 'N', thenAFis the factored form of the equilibrated matrixdiag(S)*A*diag(S).
If FACT = 'N', then AF is an output argument and on exit returns the triangular factor U or L from the Cholesky factorization A = U**T*U or A = L*L**T of the original matrix A.
If FACT = 'E', then AF is an output argument and on exit returns the triangular factor U or L from the Cholesky factorization A = U**T*U or A = L*L**T of the equilibrated matrix A (see the description of A for the form of the equilibrated matrix).
LDAFβLDAFisINTEGERThe leading dimension of the arrayAF.LDAF >= max(1,N).EQUEDβEQUEDisCHARACTER*1Specifies the form of equilibration that was done. ='N': No equilibration (always true ifFACT = 'N'). ='Y': Equilibration was done, i.e.,Ahas been replaced bydiag(S) * A * diag(S).EQUEDis an input argument ifFACT = 'F'; otherwise, it is an output argument.SβSisREALarray, dimension(N)The scale factors forA; not accessed ifEQUED = 'N'.Sis an input argument ifFACT = 'F'; otherwise,Sis an output argument. IfFACT = 'F'andEQUED = 'Y', each element ofSmust be positive.BβBisREALarray, dimension(LDB,NRHS)On entry, theN-by-NRHSright hand side matrixB. On exit, ifEQUED = 'N',Bis not modified; ifEQUED = 'Y',Bis overwritten bydiag(S) * B.LDBβLDBisINTEGERThe leading dimension of the arrayB.LDB >= max(1,N).XXβ REAL array, dimension(LDX,NRHS). IfINFO = 0orINFO = N+1, this is the N-by-NRHS solution matrix X to the original system of equations. Okay so listen: ifEQUED = 'Y', thenAandBare modified on exit, and the solution to the equilibrated system isinv(diag(S))*X. Don't forget that part or you'll be out here debugging the wrong matrix, fr fr πLDXβ INTEGER. The leading dimension of the arrayX. Requirement:LDX >= max(1,N). Respect the leading dimension πRCONDβ REAL. The estimate of the reciprocal condition number of the matrixAafter equilibration (if equilibration happened). Here's the tea: ifRCONDis less than the machine precision (in particular, ifRCOND = 0), the matrix is singular to working precision. That whole situation gets flagged by a return code ofINFO > 0.FERRβ REAL array, dimension(NRHS). The estimated forward error bound for each solution vectorX(j)(that's the j-th column of the solution matrixX). IfXTRUEis the true solution corresponding toX(j), thenFERR(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 inX(j). This estimate is as reliable as the estimate forRCOND, and it's almost always a slight overestimate of the true error β so it's giving cautious, not delulu πΈBERRβ REAL array, dimension(NRHS). The componentwise relative backward error of each solution vectorX(j)β i.e., the smallest relative change in any element ofAorBthat makesX(j)an exact solution. Slay.WORKβ REAL array, dimension(3*N). That's the scratch space, bestie, just hand it over.IWORKβ INTEGER array, dimension(N). More scratch space, integer edition.INFOβ INTEGER. The vibe report π:= 0: successful exit β¨< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = i, andiis<= N: the leading minor of orderiofAis not positive definite, so the factorization could not be completed, and the solution has not been computed.RCOND = 0is returned.= N+1:Uis nonsingular, butRCONDis 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 ofRCONDwould suggest. plot twist β¨
βοΈ Author βοΈ
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Academic royalty, no cap π
π¦ subroutine sposvxx π¦
subroutine sposvxx (character FACT, character UPLO, integer N, integer NRHS,
real, dimension( lda, * ) A, integer LDA, real, dimension( ldaf, * ) AF,
integer LDAF, character EQUED, real, dimension( * ) S, real, dimension(
ldb, * ) B, integer LDB, real, dimension( ldx, * ) X, integer LDX, real
RCOND, real RPVGRW, real, dimension( * ) BERR, integer N_ERR_BNDS, real,
dimension( nrhs, * ) ERR_BNDS_NORM, real, dimension( nrhs, * )
ERR_BNDS_COMP, integer NPARAMS, real, dimension( * ) PARAMS, real,
dimension( * ) WORK, integer, dimension( * ) IWORK, integer INFO)
SPOSVXX computes the solution to system of linear equations A * X = B for PO matrices π
πΈ Purpose πΈ
SPOSVXX uses the Cholesky factorization A = U**T*U or A = L*L**T to compute the solution to a real system of linear equations
A * X = B,
where A is an N-by-N symmetric positive definite matrix and X and B are N-by-NRHS matrices.
If requested, both normwise and maximum componentwise error bounds are returned. SPOSVXX will return a solution with a tiny guaranteed error (O(eps) where eps is the working machine precision) unless the matrix is very ill-conditioned, in which case a warning is returned. Relevant condition numbers also are calculated and returned.
SPOSVXX accepts user-provided factorizations and equilibration factors; see the definitions of the FACT and EQUED options. Solving with refinement and using a factorization from a previous SPOSVXX call will also produce a solution with either O(eps) errors or warnings, but we cannot make that claim for general user-provided factorizations and equilibration factors if they differ from what SPOSVXX would itself produce. So like, if you're rolling your own, that's on you bestie π«Ά
π Description π
The following steps are performed:
- If
FACT = 'E', real scaling factors are computed to equilibrate the system:
diag(S)*A*diag(S) *inv(diag(S))*X = diag(S)*B
Whether or not the system will be equilibrated depends on the scaling of the matrix A, but if equilibration is used, A is overwritten by diag(S)*A*diag(S) and B by diag(S)*B.
- If
FACT = 'N'or'E', the Cholesky decomposition is used to factor the matrixA(after equilibration ifFACT = 'E') as
A = U**T* U, if UPLO = 'U', or
A = L * L**T, if UPLO = 'L',
where U is an upper triangular matrix and L is a lower triangular matrix.
- If the leading i-by-i principal minor is not positive definite, then the routine returns with
INFO = i. Otherwise, the factored form ofAis used to estimate the condition number of the matrixA(see argumentRCOND). If the reciprocal of the condition number is less than machine precision, the routine still goes on to solve forXand compute error bounds as described below. - The system of equations is solved for
Xusing the factored form ofA. - By default (unless
PARAMS(LA_LINRX_ITREF_I)is set to zero), the routine will use iterative refinement to try to get a small error and error bounds. Refinement calculates the residual to at least twice the working precision. That's the secret sauce, iykyk π - If equilibration was used, the matrix
Xis premultiplied bydiag(S)so that it solves the original system before equilibration.
Some optional parameters are bundled in the PARAMS array. These settings determine how refinement is performed, but often the defaults are acceptable. If the defaults are acceptable, users can pass NPARAMS = 0 which prevents the source code from accessing the PARAMS argument. Convenient, right? π
π Parameters π
FACTβFACT is CHARACTER*1. Specifies whether or not the factored form of the matrixAis supplied on entry, and if not, whether the matrixAshould be equilibrated before it is factored.= 'F': On entry,AFcontains the factored form ofA. IfEQUEDis not'N', the matrixAhas been equilibrated with scaling factors given byS.AandAFare not modified.= 'N': The matrixAwill be copied toAFand factored.= 'E': The matrixAwill be equilibrated if necessary, then copied toAFand factored.
UPLOβUPLO is CHARACTER*1= 'U': Upper triangle ofAis stored;= 'L': Lower triangle ofAis stored.
NβN is INTEGER. The number of linear equations, i.e., the order of the matrixA.N >= 0.NRHSβNRHS is INTEGER. The number of right hand sides, i.e., the number of columns of the matricesBandX.NRHS >= 0.AβA is REAL array, dimension (LDA,N). On entry, the symmetric matrixA, except ifFACT = 'F'andEQUED = 'Y', thenAmust contain the equilibrated matrixdiag(S)*A*diag(S). IfUPLO = 'U', the leading N-by-N upper triangular part ofAcontains the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced. IfUPLO = 'L', the leading N-by-N lower triangular part ofAcontains the lower triangular part of the matrixA, and the strictly upper triangular part ofAis not referenced.Ais not modified ifFACT = 'F'or'N', or ifFACT = 'E'andEQUED = 'N'on exit.
On exit, if FACT = 'E' and EQUED = 'Y', A is overwritten by diag(S)*A*diag(S). π so watch out, it comes back different.
LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,N).AFβAF is REAL array, dimension (LDAF,N).- If
FACT = 'F', thenAFis an input argument and on entry contains the triangular factorUorLfrom the Cholesky factorizationA = U**T*UorA = L*L**T, in the same storage format asA. IfEQUED .ne. 'N', thenAFis the factored form of the equilibrated matrixdiag(S)*A*diag(S). - If
FACT = 'N', thenAFis an output argument and on exit returns the triangular factorUorLfrom the Cholesky factorizationA = U**T*UorA = L*L**Tof the original matrixA. - If
FACT = 'E', thenAFis an output argument and on exit returns the triangular factorUorLfrom the Cholesky factorizationA = U**T*UorA = L*L**Tof the equilibrated matrixA(see the description ofAfor the form of the equilibrated matrix).
- If
LDAFβLDAF is INTEGER. The leading dimension of the arrayAF.LDAF >= max(1,N).EQUEDβEQUED is CHARACTER*1. Specifies the form of equilibration that was done.= 'N': No equilibration (always true ifFACT = 'N').= 'Y': Both row and column equilibration, i.e.,Ahas been replaced bydiag(S) * A * diag(S).
EQUED is an input argument if FACT = 'F'; otherwise, it is an output argument. Switch-hitter energy π«
Sβ (REAL array, dimension(N)) π the row scale factors forA, bestie. IfEQUED = 'Y', thenAis multiplied on the left and on the right bydiag(S)β yeah, both sides, it's giving full glam π .Sis an input argument ifFACT = 'F'; otherwise,Sis an output argument. IfFACT = 'F'andEQUED = 'Y', each element ofSmust be positive (no zeroes, no negativity, periodt). IfSis output, each element ofSis a power of the radix. IfSis input, each element ofSshould be a power of the radix to ensure a reliable solution and error estimates. Scaling by powers of the radix does not cause rounding errors unless the result underflows or overflows. And rounding errors during scaling lead to refining with a matrix that is not equivalent to the input matrix, producing error estimates that may not be reliable.
lowkey important: powers of the radix are the vibe here. if you scale by anything else and things underflow/overflow, your error estimates stop being trustworthy. not a cute look. π
Bβ (REAL array, dimension(LDB,NRHS)) πΈ On entry, this is theN-by-NRHSright hand side matrixB. On exit: ifEQUED = 'N',Bis not modified; ifEQUED = 'Y',Bis overwritten bydiag(S)*B.LDBβ (INTEGER) the leading dimension of the arrayB.LDB >= max(1,N). π¦Xβ (REAL array, dimension(LDX,NRHS)) β¨ IfINFO = 0, this is theN-by-NRHSsolution matrixXto the original system of equations. Heads up though:AandBare modified on exit ifEQUED .ne. 'N', and the solution to the equilibrated system isinv(diag(S))*X.LDXβ (INTEGER) the leading dimension of the arrayX.LDX >= max(1,N). πRCONDβ (REAL) the reciprocal scaled condition number. This is an estimate of the reciprocal Skeel condition number of the matrixAafter equilibration (if done). If this is less than the machine precision (in particular, if it is zero), the matrix is singular to working precision. But β and this is the plot twist β the error may still be small even if this number is very small and the matrix appears ill-conditioned. πRPVGRWβ (REAL) reciprocal pivot growth. On exit, this contains the reciprocal pivot growth factornorm(A)/norm(U). The'max absolute element'norm is the one being used here. If this is much less than 1, then the stability of the LU factorization of the (equilibrated) matrixAcould be poor. That also means the solutionX, the estimated condition numbers, and the error bounds could all be unreliable. And if factorization fails with0<INFO<=N, then this contains the reciprocal pivot growth factor for the leadingINFOcolumns ofA. π₯BERRβ (REAL array, dimension(NRHS)) componentwise relative backward error. This is the componentwise relative backward error of each solution vectorX(j)β i.e., the smallest relative change in any element ofAorBthat makesX(j)an exact solution. πN_ERR_BNDSβ (INTEGER) the number of error bounds to return for each right hand side and each type (normwise or componentwise). SeeERR_BNDS_NORMandERR_BNDS_COMPbelow. πERR_BNDS_NORMβ (REAL array, dimension(NRHS, N_ERR_BNDS)) For each right-hand side, this array contains information about various error bounds and condition numbers corresponding to the normwise relative error, which is defined as follows:
Normwise relative error in the *i*th solution vector:
max_j (abs(XTRUE(j,i) - X(j,i)))
------------------------------
max_j abs(X(j,i))
The array is indexed by the type of error information as described below. There currently are up to three pieces of information returned.
The first index in ERR_BNDS_NORM(i,:) corresponds to the *i*th right-hand side.
The second index in ERR_BNDS_NORM(:,err) contains the following three fields:
err = 1β'Trust/don't trust'boolean. Trust the answer if the reciprocal condition number is less than the thresholdsqrt(n) * slamch('Epsilon').err = 2β'Guaranteed'error bound: the estimated forward error, almost certainly within a factor of 10 of the true error so long as the next entry is greater than the thresholdsqrt(n) * slamch('Epsilon'). This error bound should only be trusted if the previous boolean is true.err = 3β reciprocal condition number: the estimated normwise reciprocal condition number. Compared with the thresholdsqrt(n) * slamch('Epsilon')to determine if the error estimate is'guaranteed'. These reciprocal condition numbers are1 / (norm(Z^{-1},inf) * norm(Z,inf))for some appropriately scaled matrixZ. LetZ = S*A, whereSscales each row by a power of the radix so all absolute row sums ofZare approximately 1.
See Lapack Working Note 165 for further details and extra cautions. π§
ERR_BNDS_COMPβ (REAL array, dimension(NRHS, N_ERR_BNDS)) For each right-hand side, this array contains information about various error bounds and condition numbers corresponding to the componentwise relative error, which is defined as follows:
Componentwise relative error in the *i*th solution vector:
abs(XTRUE(j,i) - X(j,i))
max_j ----------------------
abs(X(j,i))
The array is indexed by the right-hand side i (on which the componentwise relative error depends), and the type of error information as described below. There currently are up to three pieces of information returned for each right-hand side. If componentwise accuracy is not requested (PARAMS(3) = 0.0), then ERR_BNDS_COMP is not accessed. If N_ERR_BNDS < 3, then at most the first (:,N_ERR_BNDS) entries are returned.
The first index in ERR_BNDS_COMP(i,:) corresponds to the *i*th right-hand side.
The second index in ERR_BNDS_COMP(:,err) contains the following three fields:
err = 1β'Trust/don't trust'boolean. Trust the answer if the reciprocal condition number is less than the thresholdsqrt(n) * slamch('Epsilon').err = 2β'Guaranteed'error bound: the estimated forward error, almost certainly within a factor of 10 of the true error so long as the next entry is greater than the thresholdsqrt(n) * slamch('Epsilon'). This error bound should only be trusted if the previous boolean is true.err = 3β reciprocal condition number: the estimated componentwise reciprocal condition number. Compared with the thresholdsqrt(n) * slamch('Epsilon')to determine if the error estimate is'guaranteed'. These reciprocal condition numbers are1 / (norm(Z^{-1},inf) * norm(Z,inf))for some appropriately scaled matrixZ. LetZ = S*(A*diag(x)), wherexis the solution for the current right-hand side andSscales each row ofA*diag(x)by a power of the radix so all absolute row sums ofZare approximately 1.
See Lapack Working Note 165 for further details and extra cautions. πΈ
NPARAMSβ (INTEGER) specifies the number of parameters set inPARAMS. If<= 0, thePARAMSarray is never referenced and default values are used. π«PARAMSβ (REAL array, dimensionNPARAMS) specifies algorithm parameters. If an entry is< 0.0, then that entry will be filled with the default value used for that parameter. Only positions up toNPARAMSare accessed; defaults are used for higher-numbered parameters. πPARAMS(LA_LINRX_ITREF_I = 1)β whether to perform iterative refinement or not. Default:1.0= 0.0: no refinement is performed, and no error bounds are computed.= 1.0: use the double-precision refinement algorithm, possibly with doubled-single computations if the compilation environment does not support DOUBLE PRECISION.- (other values are reserved for future use)
PARAMS(LA_LINRX_ITHRESH_I = 2)β maximum number of residual computations allowed for refinement. Default:10Aggressive: set to100to permit convergence using approximate factorizations or factorizations other than LU. If the factorization uses a technique other than Gaussian elimination, the guarantees inerr_bnds_normanderr_bnds_compmay no longer be trustworthy. πPARAMS(LA_LINRX_CWISE_I = 3)β flag determining if the code will attempt to find a solution with small componentwise relative error in the double-precision algorithm. Positive is true,0.0is false. Default:1.0(attempt componentwise convergence)
WORKβ (REAL array, dimension(4*N)) π«ΆIWORKβ (INTEGER array, dimension(N)) π«ΆINFO= 0β slay, we did it π Successful exit, and bestie, the solution to every right-hand side is guaranteed. No notes. π< 0β uh oh π IfINFO = -i, that means the i-th argument had an illegal value. Like, the call itself showed up with a bad outfit.> 0 and <= Nβ so here's the tea πU(INFO,INFO)is exactly zero. The factorization has been completed, but the factorUis exactly singular, which means the solution and error bounds could not be computed at all, andRCOND = 0gets returned. Not a vibe. Handle with care.= N+Jβ okay this one's the messy one, stay with me π«Ά The solution corresponding to the Jth right-hand side is not guaranteed. And the solutions for the other right-hand sides K withK > Jmay not be guaranteed either β but only the first such right-hand side gets reported, because the routine is dramatic and only has room for one confession.- If a small componentwise error is not requested (
PARAMS(3) = 0.0), then the Jth right-hand side is the first one with a normwise error bound that isn't guaranteed β meaning the smallest J such thatERR_BNDS_NORM(J,1) = 0.0. - By default (
PARAMS(3) = 1.0), the Jth right-hand side is the first with either a normwise or a componentwise error bound that isn't guaranteed β the smallest J such that eitherERR_BNDS_NORM(J,1) = 0.0orERR_BNDS_COMP(J,1) = 0.0.
- If a small componentwise error is not requested (
See the definition of ERR_BNDS_NORM(:,1) and ERR_BNDS_COMP(:,1). And if you're nosy (respectfully π) and want info about all of the right-hand sides, go check ERR_BNDS_NORM or ERR_BNDS_COMP.
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
β¨ Author (yes, again π )
Generated automatically by Doxygen for LAPACK from the source code. Not me writing fanfic β the machine did that. π€
and that's a wrap, bestie πβ¨
This whole page is living its Version 3.11.0 era, dated Sun Nov 27 2022, and it's the realPOsolve(3) glow-up we all deserved. Go forth and solve responsibly. πππ¦
π¦ where this page comes from
- debian bookworm: liblapack-doc 3.11.0-2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms