SRC/clatrs.f(3)
πΈ NAME πΈ
okay so bestie, this is the page for SRC/clatrs.f β header energy is SRC/clatrs.f(3) from the Library Functions Manual. It's giving βtriangular systems solved with scaling so overflow doesnβt crash the party.β π
β¨ SYNOPSIS β¨
π Functions/Subroutines π
subroutine clatrs (uplo, trans, diag, normin, n, a, lda, x, scale, cnorm, info)β CLATRS solves a triangular system of equations with the scale factor set to prevent overflow. periodt.
π¦ Function/Subroutine Documentation π¦
subroutine clatrs (character uplo, character trans, character diag,
character normin, integer n, complex, dimension( lda, * ) a, integer
lda, complex, dimension( * ) x, real scale, real, dimension( * ) cnorm,
integer info)
CLATRS solves a triangular system of equations with the scale factor set to prevent overflow. iconic behavior, no cap.
π Purpose π
okay so literally, CLATRS solves one of these triangular systems:
A * x = s*b, A**T * x = s*b, or A**H * x = s*b,
with scaling to prevent overflow. Here A is an upper or lower triangular matrix, A**T denotes the transpose of A, A**H denotes the conjugate 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 CTRSV 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. π singular erasure, but make it math.
π 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**H * x = s*b (Conjugate 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.AβA is COMPLEX array, dimension (LDA,N). The triangular matrixA. IfUPLO = 'U', the leading n by n upper triangular part of the arrayAcontains the upper triangular matrix, and the strictly lower triangular part ofAis not referenced. IfUPLO = 'L', the leading n by n lower triangular part of the arrayAcontains the lower triangular matrix, and the strictly upper triangular part ofAis not referenced. IfDIAG = 'U', the diagonal elements ofAare also not referenced and are assumed to be 1.LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max (1,N).XβX is COMPLEX array, dimension (N). On entry, the right hand sidebof the triangular system. On exit,Xis overwritten by the solution vectorx.SCALEβSCALE is REAL. The scaling factorsfor the triangular systemA * x = s*b, A**T * x = s*b, or A**H * x = s*b. IfSCALE = 0, the matrixAis singular or badly scaled, and the vectorxis an exact or approximate solution toA*x = 0.CNORMβCNORM is REAL array, dimension (N). IfNORMIN = '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. IfNORMIN = 'N',CNORMis an output argument andCNORM(j)returns the 1-norm of the offdiagonal part of the j-th column ofA.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, CTRSV 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 CTRSV 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 or A**H *x = b. The basic algorithm for A upper triangular is
for j = 1, ..., n
x(j) := ( b(j) - A[1:j-1,j]' * x[1:j-1] ) / A(j,j)
end
We simultaneously compute two bounds
G(j) = bound on ( b(i) - A[1:i-1,i]' * 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 CTRSV if 1/M(n) and 1/G(n) are both greater than max(underflow, 1/overflow).
π Definition at line 237 of file clatrs.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
okay bestie, that's the whole page β footer source/version sign-off: LAPACK Version 3.12.0, SRC/clatrs.f(3) β date not printed on this page, so we're not making one up. Mwah πβ¨
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms