DLATPS(3)
π NAME π
This is the dlatps.f(3) page from the Library Functions Manual, and yes bestie, it's the one and only DLATPS. The source file is literally:
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dlatps.f
β¨ SYNOPSIS β¨
πΈ Functions/Subroutines
subroutine DLATPS (uplo, trans, diag, normin, n, ap, x, scale, cnorm, info)βDLATPSsolves a triangular system of equations where the matrix is held in packed storage. Slay.
subroutine DLATPS (uplo, trans, diag, normin, n, ap, x, scale, cnorm,
info)
π¦ Function/Subroutine Documentation π¦
π subroutine DLATPS (character uplo, character trans, character diag, character normin, integer n, double precision, dimension( * ) ap, double precision, dimension( * ) x, double precision scale, double precision, dimension( * ) cnorm, integer info)
DLATPS solves a triangular system of equations with the matrix held in packed storage. It's giving linear algebra with a safety harness, honestly.
subroutine DLATPS (character uplo, character trans, character diag,
character normin, integer n, double precision, dimension( * ) ap, double
precision, dimension( * ) x, double precision scale, double precision,
dimension( * ) cnorm, integer info)
π Purpose
Okay so picture this: DLATPS solves one of these triangular systems:
A *x = s*b or A**T*x = s*b
with scaling to prevent overflow, where A is an upper or lower triangular matrix stored in packed form. Here A**T denotes the transpose of A, x and b are n-element vectors, and s is a scaling factor, usually less than or equal to 1, chosen so that the components of x will be less than the overflow threshold. If the unscaled problem will not cause overflow, the Level 2 BLAS routine DTPSV is called. If the matrix A is singular (A(j,j) = 0 for some j), then s is set to 0 and a non-trivial solution to A*x = 0 is returned. Periodt. π₯
π Parameters
UPLOβUPLO is CHARACTER*1. Specifies whether the matrixAis upper or lower triangular:= 'U': Upper triangular= 'L': Lower triangular
TRANSβTRANS is CHARACTER*1. Specifies the operation applied toA:= 'N': Solve A * x = s*b (No transpose)= 'T': Solve A**T* x = s*b (Transpose)= 'C': Solve A**T* x = s*b (Conjugate transpose = Transpose)
DIAGβDIAG is CHARACTER*1. Specifies whether or not the matrixAis unit triangular:= 'N': Non-unit triangular= 'U': Unit triangular
NORMINβNORMIN is CHARACTER*1. Specifies whetherCNORMhas been set or not:= 'Y': CNORM contains the column norms on entry= 'N': CNORM is not set on entry. On exit, the norms will be computed and stored in CNORM.
NβN is INTEGER. The order of the matrixA.N >= 0.APβAP is DOUBLE PRECISION array, dimension (N*(N+1)/2). The upper or lower triangular matrixA, packed columnwise in a linear array. The j-th column ofAis stored in the arrayAPas follows:- if
UPLO = 'U',AP(i + (j-1)*j/2) = A(i,j)for1<=i<=j; - if
UPLO = 'L',AP(i + (j-1)*(2n-j)/2) = A(i,j)forj<=i<=n.
- if
XβX is DOUBLE PRECISION array, dimension (N). On entry, the right hand sidebof the triangular system. On exit,Xis overwritten by the solution vectorx.SCALEβSCALE is DOUBLE PRECISION. The scaling factorsfor the triangular system:
A * x = s*b or A**T* x = s*b.
If SCALE = 0, the matrix A is singular or badly scaled, and the vector x is an exact or approximate solution to A*x = 0.
CNORMβCNORM is DOUBLE PRECISION array, dimension (N).- If
NORMIN = 'Y',CNORMis an input argument andCNORM(j)contains the norm of the off-diagonal part of the j-th column ofA. IfTRANS = 'N',CNORM(j)must be greater than or equal to the infinity-norm, and ifTRANS = 'T'or'C',CNORM(j)must be greater than or equal to the 1-norm. - If
NORMIN = 'N',CNORMis an output argument andCNORM(j)returns the 1-norm of the offdiagonal part of the j-th column ofA.
- If
INFOβINFO is INTEGER:= 0: successful exit< 0: if INFO = -k, the k-th argument had an illegal value
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π§ Further Details
A rough bound on x is computed; if that is less than overflow, DTPSV is called, otherwise, specific code is used which checks for possible overflow or divide-by-zero at every operation.
A columnwise scheme is used for solving A*x = b. The basic algorithm if A is lower triangular is:
x[1:n] := b[1:n]
for j = 1, ..., n
x(j) := x(j) / A(j,j)
x[j+1:n] := x[j+1:n] - x(j) * A[j+1:n,j]
end
Define bounds on the components of x after j iterations of the loop:
M(j) = bound on x[1:j]
G(j) = bound on x[j+1:n]
Initially, let M(0) = 0 and G(0) = max{x(i), i=1,...,n}.
Then for iteration j+1 we have:
M(j+1) <= G(j) / | A(j+1,j+1) |
G(j+1) <= G(j) + M(j+1) * | A[j+2:n,j+1] |
<= G(j) ( 1 + CNORM(j+1) / | A(j+1,j+1) | )
where CNORM(j+1) is greater than or equal to the infinity-norm of column j+1 of A, not counting the diagonal. Hence:
G(j) <= G(0) product ( 1 + CNORM(i) / | A(i,i) | )
1<=i<=j
and:
|x(j)| <= ( G(0) / |A(j,j)| ) product ( 1 + CNORM(i) / |A(i,i)| )
1<=i< j
Since |x(j)| <= M(j), we use the Level 2 BLAS routine DTPSV if the reciprocal of the largest M(j), j=1,..,n, is larger than max(underflow, 1/overflow).
The bound on x(j) is also used to determine when a step in the columnwise method can be performed without fear of overflow. If the computed bound is greater than a large constant, x is scaled to prevent overflow, but if the bound overflows, x is set to 0, x(j) to 1, and scale to 0, and a non-trivial solution to A*x = 0 is found.
Similarly, a row-wise scheme is used to solve A**T*x = b. The basic algorithm for A upper triangular is:
for j = 1, ..., n
x(j) := ( b(j) - A[1:j-1,j]**T * x[1:j-1] ) / A(j,j)
end
We simultaneously compute two bounds:
G(j) = bound on ( b(i) - A[1:i-1,i]**T * x[1:i-1] ), 1<=i<=j
M(j) = bound on x(i), 1<=i<=j
The initial values are G(0) = 0, M(0) = max{b(i), i=1,..,n}, and we add the constraint G(j) >= G(j-1) and M(j) >= M(j-1) for j >= 1. Then the bound on x(j) is:
M(j) <= M(j-1) * ( 1 + CNORM(j) ) / | A(j,j) |
<= M(0) * product ( ( 1 + CNORM(i) ) / |A(i,i)| )
1<=i<=j
and we can safely call DTPSV if 1/M(n) and 1/G(n) are both greater than max(underflow, 1/overflow).
π Definition at line 227 of file dlatps.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code.
π cute little sign-off, bestie: this page is from LAPACK, Version 3.12.0, and the footer pointer is /home/abui...RC/dlatps.f(3). No extra date was sitting in that footer, so I'm not inventing one. π«Άβ¨
π¦ 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