ZCPOSV(3)
π NAME
ok so this is the page for /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zcposv.f β yes the whole path, bestie, that's literally the name here π β and it lives in the Library Functions Manual.
β¨ SYNOPSIS
π¦ Functions/Subroutines
subroutine ZCPOSV (uplo, n, nrhs, a, lda, b, ldb, x, ldx, work, swork,
rwork, iter, info)
ZCPOSV computes the solution to system of linear equations A * X = B for PO matrices. π
π Function/Subroutine Documentation
subroutine ZCPOSV (character uplo, integer n, integer nrhs, complex*16,
dimension( lda, * ) a, integer lda, complex*16, dimension( ldb, * ) b,
integer ldb, complex*16, dimension( ldx, * ) x, integer ldx, complex*16,
dimension( n, * ) work, complex, dimension( * ) swork, double precision,
dimension( * ) rwork, integer iter, integer info)
ZCPOSV computes the solution to system of linear equations A * X = B for PO matrices β¨
πΈ Purpose:
ok so here's the tea, straight from the doc block:
!>
!> ZCPOSV computes the solution to a complex system of linear equations
!> A * X = B,
!> where A is an N-by-N Hermitian positive definite matrix and X and B
!> are N-by-NRHS matrices.
!>
!> ZCPOSV first attempts to factorize the matrix in COMPLEX and use this
!> factorization within an iterative refinement procedure to produce a
!> solution with COMPLEX*16 normwise backward error quality (see below).
!> If the approach fails the method switches to a COMPLEX*16
!> factorization and solve.
!>
!> The iterative refinement is not going to be a winning strategy if
!> the ratio COMPLEX performance over COMPLEX*16 performance is too
!> small. A reasonable strategy should take the number of right-hand
!> sides and the size of the matrix into account. This might be done
!> with a call to ILAENV in the future. Up to now, we always try
!> iterative refinement.
!>
!> The iterative refinement process is stopped if
!> ITER > ITERMAX
!> or for all the RHS we have:
!> RNRM < SQRT(N)*XNRM*ANRM*EPS*BWDMAX
!> where
!> o ITER is the number of the current iteration in the iterative
!> refinement process
!> o RNRM is the infinity-norm of the residual
!> o XNRM is the infinity-norm of the solution
!> o ANRM is the infinity-operator-norm of the matrix A
!> o EPS is the machine epsilon returned by DLAMCH('Epsilon')
!> The value ITERMAX and BWDMAX are fixed to 30 and 1.0D+00
!> respectively.
!>
so basically: it tries the fast COMPLEX factorization first (lowkey main character energy), does iterative refinement to keep the accuracy at COMPLEX*16 level, and only falls back to full COMPLEX*16 factorize-and-solve if that whole vibe check fails. π
And yeah, the doc itself says the refinement "is not going to be a winning strategy" when the COMPLEX-vs-COMPLEX*16 perf ratio is too small β no cap, that's a real caveat, not me being dramatic. Also ITERMAX and BWDMAX are fixed at 30 and 1.0D+00 respectively, periodt.
π«Ά Parameters
UPLOβUPLO is CHARACTER*1, and it tells you which triangle ofAgot stored:= '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 matrix B.NRHS >= 0.AβA is COMPLEX*16 array, dimension (LDA,N).- On entry, the Hermitian matrix A. If
UPLO = 'U', the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. IfUPLO = 'L', the leading N-by-N lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. - Note that the imaginary parts of the diagonal elements need not be set and are assumed to be zero. π (they just assume, okay)
- On exit, if iterative refinement has been successfully used (
INFO = 0andITER >= 0, see description below), then A is unchanged; if double precision factorization has been used (INFO = 0andITER < 0, see description below), then the array A contains the factor U or L from the Cholesky factorizationA = U**H*UorA = L*L**H.
- On entry, the Hermitian matrix A. If
LDAβLDA is INTEGER. The leading dimension of the array A.LDA >= max(1,N).BβB is COMPLEX*16 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*16 array, dimension (LDX,NRHS). IfINFO = 0, the N-by-NRHS solution matrix X. πLDXβLDX is INTEGER. The leading dimension of the array X.LDX >= max(1,N).WORKβWORK is COMPLEX*16 array, dimension (N,NRHS). This array is used to hold the residual vectors.SWORKβSWORK is COMPLEX array, dimension (N*(N+NRHS)). This array is used to use the single precision matrix and the right-hand sides or solutions in single precision.RWORKβRWORK is DOUBLE PRECISION array, dimension (N). (that's it, that's the whole description, iconic minimalism β¨)ITERβITER is INTEGER. Get ready, this one's got lore:< 0: iterative refinement has failed, COMPLEX*16 factorization has been performed-1: the routine fell back to full precision for implementation- or machine-specific reasons-2: narrowing the precision induced an overflow, the routine fell back to full precision-3: failure of CPOTRF-31: stop the iterative refinement after the 30th iterations
> 0: iterative refinement has been successfully used. Returns the number of iterations π
INFOβINFO is INTEGER:= 0: successful exit π₯³< 0: ifINFO = -i, the i-th argument had an illegal value> 0: ifINFO = i, the leading principal minor of order i of (COMPLEX*16) A is not positive, so the factorization could not be completed, and the solution has not been computed. π tragic.
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 207 of file zcposv.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code. (yes bestie, a robot wrote this one, we're all just living in its world π€)
ngl the fact that ITER = -31 exists as its own special "we gave up after 30 tries" value is so real of this routine. thirty attempts and then it's like ok bestie we're done here π
ok that's the whole page!! mwah π«Ά this was LAPACK, Version 3.12.0, and the file was /home/abui...RC/zcposv.f(3) β slay, go solve your Hermitian positive definite system, you got this β¨ππ
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms