hptrf(3)
π
hptrf(3) β the {hp,sp}trf page, aka the triangular factor glow-up
bestie, welcome to hptrf(3) from the Library Functions Manual. this is the family page for the {hp,sp}trf routines β the triangular factor β¨. it's a long one, so grab a snack π.
πΈ NAME πΈ
hptrf β {hp,sp}trf: triangular factor
π SYNOPSIS π
β¨ Functions β¨
subroutine chptrf (uplo, n, ap, ipiv, info)βCHPTRFsubroutine csptrf (uplo, n, ap, ipiv, info)βCSPTRFsubroutine dsptrf (uplo, n, ap, ipiv, info)βDSPTRFsubroutine ssptrf (uplo, n, ap, ipiv, info)βSSPTRFsubroutine zhptrf (uplo, n, ap, ipiv, info)βZHPTRFsubroutine zsptrf (uplo, n, ap, ipiv, info)βZSPTRF
π¦ Detailed Description π¦
okay so this page is literally the home of all six of them, and the deets for each one live down below in Function Documentation. no cap, each routine gets the full treatment: purpose, parameters, author, and the further-details tea β
π Function Documentation π
π subroutine chptrf π
subroutine chptrf (character uplo, integer n, complex, dimension( * ) ap,
integer, dimension( * ) ipiv, integer info)
CHPTRF
π Purpose π
!>
!> CHPTRF computes the factorization of a complex Hermitian packed
!> matrix A using the Bunch-Kaufman diagonal pivoting method:
!>
!> A = U*D*U**H or A = L*D*L**H
!>
!> 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.
!>
π§ Parameters π§
UPLO
!> UPLO is CHARACTER*1
!> = 'U': Upper triangle of A is stored;
!> = 'L': Lower triangle of A is stored.
!>
N
!> N is INTEGER
!> The order of the matrix A. N >= 0.
!>
AP
!> AP is COMPLEX array, dimension (N*(N+1)/2)
!> On entry, 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
!>
!> On exit, the block diagonal matrix D and the multipliers used
!> to obtain the factor U or L, stored as a packed triangular
!> matrix overwriting A (see below for further details).
!>
IPIV
!> IPIV is INTEGER array, dimension (N)
!> Details of the interchanges and the block structure of D.
!> 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.
!>
INFO
!> INFO is INTEGER
!> = 0: successful exit
!> < 0: if INFO = -i, the i-th argument had an illegal value
!> > 0: if INFO = i, D(i,i) is exactly zero. The factorization
!> has been completed, but the block diagonal matrix D is
!> exactly singular, and division by zero will occur if it
!> is used to solve a system of equations.
!>
β οΈ heads up bestie: anINFO > 0meansD(i,i)is exactly zero β the factorization finished, butDis exactly singular, so if you go use it to solve a system of equations you will literally divide by zero. not a vibe. π
π Author π
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
π Further Details: π
!>
!> If UPLO = 'U', then A = U*D*U**H, where
!> U = P(n)*U(n)* ... *P(k)U(k)* ...,
!> i.e., U is a product of terms P(k)*U(k), where k decreases from n to
!> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1
!> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as
!> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such
!> that if the diagonal block D(k) is of order s (s = 1 or 2), then
!>
!> ( I v 0 ) k-s
!> U(k) = ( 0 I 0 ) s
!> ( 0 0 I ) n-k
!> k-s s n-k
!>
!> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k).
!> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k),
!> and A(k,k), and v overwrites A(1:k-2,k-1:k).
!>
!> If UPLO = 'L', then A = L*D*L**H, where
!> L = P(1)*L(1)* ... *P(k)*L(k)* ...,
!> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to
!> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1
!> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as
!> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such
!> that if the diagonal block D(k) is of order s (s = 1 or 2), then
!>
!> ( I 0 0 ) k-1
!> L(k) = ( 0 I 0 ) s
!> ( 0 v I ) n-k-s+1
!> k-1 s n-k-s+1
!>
!> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k).
!> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k),
!> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1).
!>
π«Ά Contributors: π«Ά
J. Lewis, Boeing Computer Services Company
Definition at line 158 of file chptrf.f.
π subroutine csptrf π
subroutine csptrf (character uplo, integer n, complex, dimension( * ) ap,
integer, dimension( * ) ipiv, integer info)
CSPTRF
π Purpose π
!>
!> CSPTRF computes the factorization of a complex symmetric matrix A
!> stored in packed format using the Bunch-Kaufman diagonal pivoting
!> method:
!>
!> A = U*D*U**T or A = L*D*L**T
!>
!> 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.
!>
π§ Parameters π§
UPLO
!> UPLO is CHARACTER*1
!> = 'U': Upper triangle of A is stored;
!> = 'L': Lower triangle of A is stored.
!>
N
!> N is INTEGER
!> The order of the matrix A. N >= 0.
!>
AP
!> AP is COMPLEX array, dimension (N*(N+1)/2)
!> On entry, 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
!>
!> On exit, the block diagonal matrix D and the multipliers used
!> to obtain the factor U or L, stored as a packed triangular
!> matrix overwriting A (see below for further details).
!>
IPIV
!> IPIV is INTEGER array, dimension (N)
!> Details of the interchanges and the block structure of D.
!> 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.
!>
INFO
!> INFO is INTEGER
!> = 0: successful exit
!> < 0: if INFO = -i, the i-th argument had an illegal value
!> > 0: if INFO = i, D(i,i) is exactly zero. The factorization
!> has been completed, but the block diagonal matrix D is
!> exactly singular, and division by zero will occur if it
!> is used to solve a system of equations.
!>
β οΈ same warning, same energy:INFO > 0meansD(i,i)is exactly zero,Dis exactly singular, and solving with it = division by zero. periodt. π
π Author π
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
π Further Details: π
!>
!> 5-96 - Based on modifications by J. Lewis, Boeing Computer Services
!> Company
!>
!> If UPLO = 'U', then A = U*D*U**T, where
!> U = P(n)*U(n)* ... *P(k)U(k)* ...,
!> i.e., U is a product of terms P(k)*U(k), where k decreases from n to
!> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1
!> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as
!> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such
!> that if the diagonal block D(k) is of order s (s = 1 or 2), then
!>
!> ( I v 0 ) k-s
!> U(k) = ( 0 I 0 ) s
!> ( 0 0 I ) n-k
!> k-s s n-k
!>
!> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k).
!> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k),
!> and A(k,k), and v overwrites A(1:k-2,k-1:k).
!>
!> If UPLO = 'L', then A = L*D*L**T, where
!> L = P(1)*L(1)* ... *P(k)*L(k)* ...,
!> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to
!> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1
!> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as
!> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such
!> that if the diagonal block D(k) is of order s (s = 1 or 2), then
!>
!> ( I 0 0 ) k-1
!> L(k) = ( 0 I 0 ) s
!> ( 0 v I ) n-k-s+1
!> k-1 s n-k-s+1
!>
!> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k).
!> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k),
!> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1).
!>
Definition at line 157 of file csptrf.f.
π subroutine dsptrf π
subroutine dsptrf (character uplo, integer n, double precision, dimension( *
) ap, integer, dimension( * ) ipiv, integer info)
DSPTRF
π Purpose π
!>
!> DSPTRF computes the factorization of a real symmetric matrix A stored
!> in packed format using the Bunch-Kaufman diagonal pivoting method:
!>
!> A = U*D*U**T or A = L*D*L**T
!>
!> 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.
!>
π§ Parameters π§
UPLO
β¦and we're straight into the parameter list, no cap. Buckle up π
UPLOβ it'sCHARACTER*1, and it's literally just you telling the routine which half of the matrix you actually bothered to store:= 'U': upper triangle of A is stored β¨= 'L': lower triangle of A is stored β¨
NβINTEGER. The order of the matrix A. The one constraint:N >= 0. That's it, that's the girl πAPβDOUBLE PRECISIONarray, dimension(N*(N+1)/2). On entry it's the upper or lower triangle of the symmetric matrix A, packed columnwise in a linear array. The j-th column of A gets stashed in the array AP like so:
if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
On exit: the block diagonal matrix D and the multipliers used to obtain the factor U or L, stored as a packed triangular matrix overwriting A (peep "Further Details" below, it's all there π).
IPIVβINTEGERarray, dimension(N). The deets on the interchanges and the block structure of D:- If
IPIV(k) > 0, then rows and columns k andIPIV(k)were interchanged andD(k,k)is a 1-by-1 diagonal block. - If
UPLO = 'U'andIPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and-IPIV(k)were interchanged andD(k-1:k,k-1:k)is a 2-by-2 diagonal block. - If
UPLO = 'L'andIPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and-IPIV(k)were interchanged andD(k:k+1,k:k+1)is a 2-by-2 diagonal block.
- If
INFOβINTEGER, the whole vibe report:= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = i,D(i,i)is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, and division by zero will occur if it is used to solve a system of equations. that's the danger zone, bestie π
β¨ Author β¨
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
β¨ Further Details β¨
If UPLO = 'U', then A = U*D*U**T, where
U = P(n)*U(n)* ... *P(k)U(k)* ...,
i.e., U is a product of terms P(k)*U(k), where k decreases from n to 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and U(k) is a unit upper triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I v 0 ) k-s
U(k) = ( 0 I 0 ) s
( 0 0 I ) n-k
k-s s n-k
If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), and A(k,k), and v overwrites A(1:k-2,k-1:k).
If UPLO = 'L', then A = L*D*L**T, where
L = P(1)*L(1)* ... *P(k)*L(k)* ...,
i.e., L is a product of terms P(k)*L(k), where k increases from 1 to n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and L(k) is a unit lower triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I 0 0 ) k-1
L(k) = ( 0 I 0 ) s
( 0 v I ) n-k-s+1
k-1 s n-k-s+1
If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1).
β¨ Contributors β¨
J. Lewis, Boeing Computer Services Company π«Ά
β¨ Definition β¨
Definition at line 158 of file dsptrf.f.
π subroutine ssptrf π
subroutine ssptrf (character uplo, integer n, real, dimension( * ) ap,
integer, dimension( * ) ipiv, integer info)
SSPTRF
Purpose
SSPTRF computes the factorization of a real symmetric matrix A stored in packed format using the Bunch-Kaufman diagonal pivoting method:
A = U*D*U**T or A = L*D*L**T
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. she's doing the exact same thing as her double-precision sister, just in REAL π¦
Parameters
UPLOβCHARACTER*1, same deal as always:= 'U': upper triangle of A is stored= 'L': lower triangle of A is stored
NβINTEGER. The order of the matrix A.N >= 0.APβREALarray, dimension(N*(N+1)/2). On entry, 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
On exit, the block diagonal matrix D and the multipliers used to obtain the factor U or L, stored as a packed triangular matrix overwriting A (see below for further details π).
IPIVβINTEGERarray, dimension(N). Details of the interchanges and the block structure of D:- If
IPIV(k) > 0, then rows and columns k andIPIV(k)were interchanged andD(k,k)is a 1-by-1 diagonal block. - If
UPLO = 'U'andIPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and-IPIV(k)were interchanged andD(k-1:k,k-1:k)is a 2-by-2 diagonal block. - If
UPLO = 'L'andIPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and-IPIV(k)were interchanged andD(k:k+1,k:k+1)is a 2-by-2 diagonal block.
- If
INFOβINTEGER:= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value> 0: ifINFO = i,D(i,i)is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, and division by zero will occur if it is used to solve a system of equations. clocking that as a whole warning, fr fr
β¨ Author β¨
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
β¨ Further Details β¨
5-96 - Based on modifications by J. Lewis, Boeing Computer Services
Company
If UPLO = 'U', then A = U*D*U**T, where
U = P(n)*U(n)* ... *P(k)U(k)* ...,
i.e., U is a product of terms P(k)*U(k), where k decreases from n to 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and U(k) is a unit upper triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I v 0 ) k-s
U(k) = ( 0 I 0 ) s
( 0 0 I ) n-k
k-s s n-k
If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), and A(k,k), and v overwrites A(1:k-2,k-1:k).
If UPLO = 'L', then A = L*D*L**T, where
L = P(1)*L(1)* ... *P(k)*L(k)* ...,
i.e., L is a product of terms P(k)*L(k), where k increases from 1 to n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and L(k) is a unit lower triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I 0 0 ) k-1
L(k) = ( 0 I 0 ) s
( 0 v I ) n-k-s+1
k-1 s n-k-s+1
If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1).
β¨ Definition β¨
Definition at line 156 of file ssptrf.f.
π subroutine zhptrf π
subroutine zhptrf (character uplo, integer n, complex*16, dimension( * ) ap,
integer, dimension( * ) ipiv, integer info)
ZHPTRF
Purpose
ZHPTRF computes the factorization of a complex Hermitian packed matrix A using the Bunch-Kaufman diagonal pivoting method:
A = U*D*U**H or A = L*D*L**H
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. complex Hermitian edition, the transposes got promoted to conjugate transposes, we love an upgrade π
Parameters
UPLOβCHARACTER*1:= 'U': upper triangle of A is stored= 'L': lower triangle of A is stored
NβINTEGER. The order of the matrix A.N >= 0.APβCOMPLEX*16array, dimension(N*(N+1)/2). On entry, 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)*(2n-j)/2) = A(i,j) for j<=i<=n.
On exit, the block diagonal matrix D and the multipliers used to obtain the factor U or L, stored as a packed triangular matrix overwriting A (see below for further details π).
IPIV
IPIV β INTEGER array, dimension (N), and it's giving receipts β¨ it's where all the interchange gossip lives, plus the block structure of D:
- If
IPIV(k) > 0, then rows and columnskandIPIV(k)were interchanged andD(k,k)is a 1-by-1 diagonal block. cute, simple, one-cell era π - If
UPLO = 'U'andIPIV(k) = IPIV(k-1) < 0, then rows and columnsk-1and-IPIV(k)were interchanged andD(k-1:k,k-1:k)is a 2-by-2 diagonal block. they're matching, it's a duo π«Ά - If
UPLO = 'L'andIPIV(k) = IPIV(k+1) < 0, then rows and columnsk+1and-IPIV(k)were interchanged andD(k:k+1,k:k+1)is a 2-by-2 diagonal block. same energy, other direction π
INFO β INTEGER, the vibe report at the end of the whole thing π
= 0: successful exit. slay, we ate, no notes β¨< 0: ifINFO = -i, the i-th argument had an illegal value. someone handed in the wrong thing bestie π> 0: ifINFO = i,D(i,i)is exactly zero. The factorization has been completed, but the block diagonal matrixDis exactly singular, and division by zero will occur if it is used to solve a system of equations. π¨ like, the math worked but the answer is do not divide, fr fr, that's a whole trap.
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
πΈ Further Details
okay so this is the part where they spell out the whole factorization vibe, and honestly it's iconic:
If UPLO = 'U', then A = U*D*U**H, where
U = P(n)*U(n)* ... *P(k)U(k)* ...,
i.e., U is a product of terms P(k)*U(k), where k decreases from n to 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and U(k) is a unit upper triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I v 0 ) k-s
U(k) = ( 0 I 0 ) s
( 0 0 I ) n-k
k-s s n-k
- If
s = 1,D(k)overwritesA(k,k), andvoverwritesA(1:k-1,k). - If
s = 2, the upper triangle ofD(k)overwritesA(k-1,k-1),A(k-1,k), andA(k,k), andvoverwritesA(1:k-2,k-1:k).
Then the other direction π¦ If UPLO = 'L', then A = L*D*L**H, where
L = P(1)*L(1)* ... *P(k)*L(k)* ...,
i.e., L is a product of terms P(k)*L(k), where k increases from 1 to n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and L(k) is a unit lower triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I 0 0 ) k-1
L(k) = ( 0 I 0 ) s
( 0 v I ) n-k-s+1
k-1 s n-k-s+1
- If
s = 1,D(k)overwritesA(k,k), andvoverwritesA(k+1:n,k). - If
s = 2, the lower triangle ofD(k)overwritesA(k,k),A(k+1,k), andA(k+1,k+1), andvoverwritesA(k+2:n,k:k+1).
π Contributors
J. Lewis, Boeing Computer Services Company
π Definition at line 158 of file zhptrf.f.
π¦ subroutine zsptrf (character uplo, integer n, complex*16, dimension( * ) ap, integer, dimension( * ) ipiv, integer info)
ZSPTRF
β Purpose
okay so ZSPTRF computes the factorization of a complex symmetric matrix A stored in packed format using the Bunch-Kaufman diagonal pivoting method:
A = U*D*U**T or A = L*D*L**T
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. no cap, that's the whole assignment π
π§ Parameters
UPLOβUPLO is CHARACTER*1, the "which triangle are we doing today" switch:= 'U': Upper triangle ofAis stored;= 'L': Lower triangle ofAis stored.
NβN is INTEGER, the order of the matrixA.N >= 0. (yes, an order, not a suggestion β¨)APβAP is COMPLEX*16 array, dimension (N*(N+1)/2). On entry, the upper or lower triangle of the symmetric 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
On exit, the block diagonal matrix D and the multipliers used to obtain the factor U or L, stored as a packed triangular matrix overwriting A (see below for further details). it literally moves in and redecorates, obsessed π
IPIVβIPIV is INTEGER array, dimension (N). Details of the interchanges and the block structure ofD:- If
IPIV(k) > 0, then rows and columnskandIPIV(k)were interchanged andD(k,k)is a 1-by-1 diagonal block. - If
UPLO = 'U'andIPIV(k) = IPIV(k-1) < 0, then rows and columnsk-1and-IPIV(k)were interchanged andD(k-1:k,k-1:k)is a 2-by-2 diagonal block. - If
UPLO = 'L'andIPIV(k) = IPIV(k+1) < 0, then rows and columnsk+1and-IPIV(k)were interchanged andD(k:k+1,k:k+1)is a 2-by-2 diagonal block.
- If
INFOβINFO is INTEGER, the final report card π= 0: successful exit< 0: ifINFO = -i, the i-th argument had an illegal value> 0: ifINFO = i,D(i,i)is exactly zero. The factorization has been completed, but the block diagonal matrixDis exactly singular, and division by zero will occur if it is used to solve a system of equations. π« so like, technically finished, but do not go dividing.
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
πΈ Further Details
5-96 - Based on modifications by J. Lewis, Boeing Computer Services Company β periodt, that's where it came from π«Ά
If UPLO = 'U', then A = U*D*U**T, where
U = P(n)*U(n)* ... *P(k)U(k)* ...,
i.e., U is a product of terms P(k)*U(k), where k decreases from n to 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and U(k) is a unit upper triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I v 0 ) k-s
U(k) = ( 0 I 0 ) s
( 0 0 I ) n-k
k-s s n-k
- If
s = 1,D(k)overwritesA(k,k), andvoverwritesA(1:k-1,k). - If
s = 2, the upper triangle ofD(k)overwritesA(k-1,k-1),A(k-1,k), andA(k,k), andvoverwritesA(1:k-2,k-1:k).
If UPLO = 'L', then A = L*D*L**T, where
L = P(1)*L(1)* ... *P(k)*L(k)* ...,
i.e., L is a product of terms P(k)*L(k), where k increases from 1 to n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and L(k) is a unit lower triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I 0 0 ) k-1
L(k) = ( 0 I 0 ) s
( 0 v I ) n-k-s+1
k-1 s n-k-s+1
- If
s = 1,D(k)overwritesA(k,k), andvoverwritesA(k+1:n,k). - If
s = 2, the lower triangle ofD(k)overwritesA(k,k),A(k+1,k), andA(k+1,k+1), andvoverwritesA(k+2:n,k:k+1).
π Definition at line 157 of file zsptrf.f.
Author
Generated automatically by Doxygen for LAPACK from the source code.
and that's the whole page bestie, we made it to the end ππ¦ this cutie is LAPACK Version 3.12.0, filed under hptrf(3), and yes she was auto-generated by Doxygen from the source code, so you know it's accurate π go forth and factor, ily, bye πβ¨
π¦ 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