pftrf(3)
π¦ pftrf(3) β the triangular factor glow-up
okay so picture this: it's pftrf(3), it lives in the Library Functions Manual, and it's literally the page that gives you the Cholesky factorization but in that β¨specialβ¨ RFP storage layout. bestie, this one is a journey, but we're gonna get through it together π
πΈ NAME
pftrf β pftrf: triangular factor
like, that's the whole name. short. iconic. pftrf does the triangular factor thing. periodt.
β¨ SYNOPSIS
π Functions
subroutine cpftrf (transr, uplo, n, a, info)β CPFTRF πsubroutine dpftrf (transr, uplo, n, a, info)β DPFTRF πsubroutine spftrf (transr, uplo, n, a, info)β SPFTRF πsubroutine zpftrf (transr, uplo, n, a, info)β ZPFTRF π
four flavors, same energy: complex, double, single, double-complex. pick your fighter π«Ά
π§ Detailed Description
okay so this is the part where we get into the actual function documentation. buckle up, bestie, there's a lot of RFP format lore and honestly? it slays once you get it. π₯
π Function Documentation
β subroutine cpftrf (character transr, character uplo, integer n, complex, dimension( 0: * ) a, integer info)
CPFTRF β the complex one, the hermitian one, the main character π
π¦ Purpose:
so here's the vibe: CPFTRF computes the Cholesky factorization of a complex Hermitian positive definite matrix A.
the factorization has the form
A = U**H * U, if UPLO = 'U', or
A = L * L**H, if UPLO = 'L',
where U is an upper triangular matrix and L is lower triangular. no cap.
and this one? this is the block version of the algorithm, calling Level 3 BLAS. highkey the fast one. π₯
π Parameters
TRANSRβ CHARACTER1*= 'N': the Normal TRANSR of RFP A is stored= 'C': the Conjugate-transpose TRANSR of RFP A is stored
UPLOβ CHARACTER1*= 'U': Upper triangle of RFP A is stored= 'L': Lower triangle of RFP A is stored
Nβ INTEGER- the order of the matrix
A.N >= 0.
- the order of the matrix
Aβ COMPLEX array, dimension ( N(N+1)/2 )*- On entry: the Hermitian matrix
Ain RFP format. RFP format is described byTRANSR,UPLO, andNas follows: ifTRANSR = 'N'then RFP A is(0:N,0:k-1)whenNis even;k=N/2. RFP A is(0:N-1,0:k)whenNis odd;k=N/2. IFTRANSR = 'C'then RFP is the Conjugate-transpose of RFP A as defined whenTRANSR = 'N'. The contents of RFP A are defined byUPLOas follows: ifUPLO = 'U'the RFP A contains the nt elements of upper packed A. IfUPLO = 'L'the RFP A contains the elements of lower packed A. The LDA of RFP A is(N+1)/2whenTRANSR = 'C'. WhenTRANSRis'N'the LDA isN+1whenNis even andNis odd. See the Note below for more details. π«Ά - On exit: if
INFO = 0, the factorUorLfrom the Cholesky factorizationRFP A = U**H*UorRFP A = L*L**H.
- On entry: the Hermitian matrix
INFOβ INTEGER= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = i, the leading principal minor of orderiis not positive, and the factorization could not be completed π
π Further Notes on RFP Format:
============================
okay bestie, this is the part everybody skips and then gets confused about later. don't be that girl. read the notes. π
We first consider Standard Packed Format when N is even. We give an example where N = 6.
AP is Upper AP is Lower
00 01 02 03 04 05 00
11 12 13 14 15 10 11
22 23 24 25 20 21 22
33 34 35 30 31 32 33
44 45 40 41 42 43 44
55 50 51 52 53 54 55
Let TRANSR = 'N'. RFP holds AP as follows: For UPLO = 'U' the upper trapezoid A(0:5,0:2) consists of the last three columns of AP upper. The lower triangle A(4:6,0:2) consists of conjugate-transpose of the first three columns of AP upper. For UPLO = 'L' the lower trapezoid A(1:6,0:2) consists of the first three columns of AP lower. The upper triangle A(0:2,0:2) consists of conjugate-transpose of the last three columns of AP lower. To denote conjugate we place -- above the element. This covers the case N even and TRANSR = 'N'.
RFP A RFP A
-- -- --
03 04 05 33 43 53
-- --
13 14 15 00 44 54
--
23 24 25 10 11 55
33 34 35 20 21 22
--
00 44 45 30 31 32
-- --
01 11 55 40 41 42
-- -- --
02 12 22 50 51 52
Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-transpose of RFP A above. One therefore gets:
RFP A RFP A
-- -- -- -- -- -- -- -- -- --
03 13 23 33 00 01 02 33 00 10 20 30 40 50
-- -- -- -- -- -- -- -- -- --
04 14 24 34 44 11 12 43 44 11 21 31 41 51
-- -- -- -- -- -- -- -- -- --
05 15 25 35 45 55 22 53 54 55 22 32 42 52
We next consider Standard Packed Format when N is odd. We give an example where N = 5.
AP is Upper AP is Lower
00 01 02 03 04 00
11 12 13 14 10 11
22 23 24 20 21 22
33 34 30 31 32 33
44 40 41 42 43 44
Let TRANSR = 'N'. RFP holds AP as follows: For UPLO = 'U' the upper trapezoid A(0:4,0:2) consists of the last three columns of AP upper. The lower triangle A(3:4,0:1) consists of conjugate-transpose of the first two columns of AP upper. For UPLO = 'L' the lower trapezoid A(0:4,0:2) consists of the first three columns of AP lower. The upper triangle A(0:1,1:2) consists of conjugate-transpose of the last two columns of AP lower. To denote conjugate we place -- above the element. This covers the case N odd and TRANSR = 'N'.
RFP A RFP A
-- --
02 03 04 00 33 43
--
12 13 14 10 11 44
22 23 24 20 21 22
--
00 33 34 30 31 32
-- --
01 11 44 40 41 42
Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-transpose of RFP A above. One therefore gets:
RFP A RFP A
-- -- -- -- -- -- -- -- --
02 12 22 00 01 00 10 20 30 40 50
-- -- -- -- -- -- -- -- --
03 13 23 33 11 33 11 21 31 41 51
-- -- -- -- -- -- -- -- --
04 14 24 34 44 43 44 22 32 42 52
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 210 of file cpftrf.f.
β subroutine dpftrf (character transr, character uplo, integer n, double precision, dimension( 0: * ) a, integer info)
DPFTRF β same energy, but make it real symmetric π«Ά
π¦ Purpose:
DPFTRF computes the Cholesky factorization of a real symmetric positive definite matrix A.
the factorization has the form
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 lower triangular.
and again, this is the block version of the algorithm, calling Level 3 BLAS. β
π Parameters
TRANSRβ CHARACTER1*= 'N': the Normal TRANSR of RFP A is stored= 'T': the Transpose TRANSR of RFP A is stored
UPLOβ CHARACTER1*= 'U': Upper triangle of RFP A is stored= 'L': Lower triangle of RFP A is stored
Nβ INTEGER- the order of the matrix
A.N >= 0.
- the order of the matrix
Aβ DOUBLE PRECISION array, dimension ( N(N+1)/2 )*- On entry: the symmetric matrix
Ain RFP format. RFP format is described byTRANSR,UPLO, andNas follows: ifTRANSR = 'N'then RFP A is(0:N,0:k-1)whenNis even;k=N/2. RFP A is(0:N-1,0:k)whenNis odd;k=N/2. IFTRANSR = 'T'then RFP is the transpose of RFP A as defined whenTRANSR = 'N'. The contents of RFP A are defined byUPLOas follows: ifUPLO = 'U'the RFP A contains the NT elements of upper packed A. IfUPLO = 'L'the RFP A contains the elements of lower packed A. The LDA of RFP A is(N+1)/2whenTRANSR = 'T'. WhenTRANSRis'N'the LDA isN+1whenNis even andNis odd. See the Note below for more details. π - On exit: if
INFO = 0, the factorUorLfrom the Cholesky factorizationRFP A = U**T*UorRFP A = L*L**T.
- On entry: the symmetric matrix
INFOβ INTEGER= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = i, the leading principal minor of orderiis not positive, and the factorization could not be completed π
btw bestie β noticeTRANSR = 'T'here instead of'C', and**Tinstead of**H. that's the whole real-vs-complex moment. don't mix 'em up. π
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Further Details:
okay so before we even touch the code we HAVE to talk about Rectangular Full Packed (RFP) format, because that is the entire personality of this routine and honestly it's giving origami π¦ no cap, this is the part everyone skips and then cries about later.
Case one: N is even, bestie. We're gonna use N = 6 as the example. Here's AP in upper and lower flavour:
AP is Upper AP is Lower
00 01 02 03 04 05 00
11 12 13 14 15 10 11
22 23 24 25 20 21 22
33 34 35 30 31 32 33
44 45 40 41 42 43 44
55 50 51 52 53 54 55
Let TRANSR = 'N'. RFP holds AP like this, periodt:
- For
UPLO = 'U'the upper trapezoidA(0:5,0:2)consists of the last three columns ofAPupper. The lower triangleA(4:6,0:2)consists of the transpose of the first three columns ofAPupper. - For
UPLO = 'L'the lower trapezoidA(1:6,0:2)consists of the first three columns ofAPlower. The upper triangleA(0:2,0:2)consists of the transpose of the last three columns ofAPlower.
This covers the case N even and TRANSR = 'N'. β¨
RFP A RFP A
03 04 05 33 43 53
13 14 15 00 44 54
23 24 25 10 11 55
33 34 35 20 21 22
00 44 45 30 31 32
01 11 55 40 41 42
02 12 22 50 51 52
Now let TRANSR = 'T'. RFP A in both UPLO cases is just the transpose of RFP A above. One therefore gets:
RFP A RFP A
03 13 23 33 00 01 02 33 00 10 20 30 40 50
04 14 24 34 44 11 12 43 44 11 21 31 41 51
05 15 25 35 45 55 22 53 54 55 22 32 42 52
Case two: N is odd. Now N = 5, because we keep it cute and slightly off-balance π
AP is Upper AP is Lower
00 01 02 03 04 00
11 12 13 14 10 11
22 23 24 20 21 22
33 34 30 31 32 33
44 40 41 42 43 44
Let TRANSR = 'N'. RFP holds AP like so:
- For
UPLO = 'U'the upper trapezoidA(0:4,0:2)consists of the last three columns ofAPupper. The lower triangleA(3:4,0:1)consists of the transpose of the first two columns ofAPupper. - For
UPLO = 'L'the lower trapezoidA(0:4,0:2)consists of the first three columns ofAPlower. The upper triangleA(0:1,1:2)consists of the transpose of the last two columns ofAPlower.
This covers the case N odd and TRANSR = 'N'. π
RFP A RFP A
02 03 04 00 33 43
12 13 14 10 11 44
22 23 24 20 21 22
00 33 34 30 31 32
01 11 44 40 41 42
Now let TRANSR = 'T'. RFP A in both UPLO cases is just the transpose of RFP A above. One therefore gets:
RFP A RFP A
02 12 22 00 01 00 10 20 30 40 50
03 13 23 33 11 33 11 21 31 41 51
04 14 24 34 44 43 44 22 32 42 52
Definition at line 197 of file dpftrf.f. π
π subroutine spftrf
subroutine spftrf (character transr, character uplo, integer n, real,
dimension( 0: * ) a, integer info)
SPFTRF
πΈ Purpose
SPFTRF computes the Cholesky factorization of a real symmetric positive definite matrix A.
The factorization has the form
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 lower triangular.
This is the block version of the algorithm, calling Level 3 BLAS. icon behaviour honestly π
π Parameters
TRANSRβTRANSRisCHARACTER*1;= 'N': the Normal TRANSR of RFPAis stored;= 'T': the Transpose TRANSR of RFPAis stored.UPLOβUPLOisCHARACTER*1;= 'U': upper triangle of RFPAis stored;= 'L': lower triangle of RFPAis stored.NβNisINTEGER; the order of the matrixA.N >= 0.AβAisREALarray, dimension( N*(N+1)/2 ). On entry, the symmetric matrixAin RFP format. RFP format is described byTRANSR,UPLO, andNas follows: ifTRANSR = 'N'then RFPAis(0:N,0:k-1)whenNis even;k=N/2. RFPAis(0:N-1,0:k)whenNis odd;k=N/2. IFTRANSR = 'T'then RFP is the transpose of RFPAas defined whenTRANSR = 'N'. The contents of RFPAare defined byUPLOas follows: ifUPLO = 'U'the RFPAcontains theNTelements of upper packedA. IfUPLO = 'L'the RFPAcontains the elements of lower packedA. TheLDAof RFPAis(N+1)/2whenTRANSR = 'T'. WhenTRANSRis'N'theLDAisN+1whenNis even andNis odd. See the Note below for more details. On exit, ifINFO = 0, the factorUorLfrom the Cholesky factorization RFPA = U**T*Uor RFPA = L*L**T.INFOβINFOisINTEGER;= 0: successful exit;< 0: ifINFO = -i, the i-th argument had an illegal value;> 0: ifINFO = i, the leading principal minor of order i is not positive, and the factorization could not be completed.
π Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
β Further Details
okay so before we even touch the code we HAVE to talk about Rectangular Full Packed (RFP) format, because that is the entire personality of this routine and honestly it's giving origami π¦ no cap, this is the part everyone skips and then cries about later.
Case one: N is even, bestie. We're gonna use N = 6 as the example. Here's AP in upper and lower flavour:
AP is Upper AP is Lower
00 01 02 03 04 05 00
11 12 13 14 15 10 11
22 23 24 25 20 21 22
33 34 35 30 31 32 33
44 45 40 41 42 43 44
55 50 51 52 53 54 55
Let TRANSR = 'N'. RFP holds AP like this, periodt:
- For
UPLO = 'U'the upper trapezoidA(0:5,0:2)consists of the last three columns ofAPupper. The lower triangleA(4:6,0:2)consists of the transpose of the first three columns ofAPupper. - For
UPLO = 'L'the lower trapezoidA(1:6,0:2)consists of the first three columns ofAPlower. The upper triangleA(0:2,0:2)consists of the transpose of the last three columns ofAPlower.
This covers the case N even and TRANSR = 'N'. β¨
RFP A RFP A
03 04 05 33 43 53
13 14 15 00 44 54
23 24 25 10 11 55
33 34 35 20 21 22
00 44 45 30 31 32
01 11 55 40 41 42
02 12 22 50 51 52
Now let TRANSR = 'T'. RFP A in both UPLO cases is just the transpose of RFP A above. One therefore gets:
RFP A RFP A
03 13 23 33 00 01 02 33 00 10 20 30 40 50
04 14 24 34 44 11 12 43 44 11 21 31 41 51
05 15 25 35 45 55 22 53 54 55 22 32 42 52
Case two: N is odd. Now N = 5, because we keep it cute and slightly off-balance π
AP is Upper AP is Lower
00 01 02 03 04 00
11 12 13 14 10 11
22 23 24 20 21 22
33 34 30 31 32 33
44 40 41 42 43 44
Let TRANSR = 'N'. RFP holds AP like so:
- For
UPLO = 'U'the upper trapezoidA(0:4,0:2)consists of the last three columns ofAPupper. The lower triangleA(3:4,0:1)consists of the transpose of the first two columns ofAPupper. - For
UPLO = 'L'the lower trapezoidA(0:4,0:2)consists of the first three columns ofAPlower. The upper triangleA(0:1,1:2)consists of the transpose of the last two columns ofAPlower.
This covers the case N odd and TRANSR = 'N'. π
RFP A RFP A
02 03 04 00 33 43
12 13 14 10 11 44
22 23 24 20 21 22
00 33 34 30 31 32
01 11 44 40 41 42
Now let TRANSR = 'T'. RFP A in both UPLO cases is just the transpose of RFP A above. One therefore gets:
RFP A RFP A
02 12 22 00 01 00 10 20 30 40 50
03 13 23 33 11 33 11 21 31 41 51
04 14 24 34 44 43 44 22 32 42 52
Definition at line 197 of file spftrf.f. π
π¦ subroutine zpftrf
subroutine zpftrf (character transr, character uplo, integer n, complex*16,
dimension( 0: * ) a, integer info)
ZPFTRF
π Purpose
ZPFTRF computes the Cholesky factorization of a complex Hermitian positive definite matrix A.
The factorization has the form
A = U**H * U, if UPLO = 'U', or
A = L * L**H, if UPLO = 'L',
where U is an upper triangular matrix and L is lower triangular.
This is the block version of the algorithm, calling Level 3 BLAS. yeah, Level 3 BLAS, she's fancy like that π₯
π§ Parameters
TRANSRβTRANSRisCHARACTER*1;= 'N': the Normal TRANSR of RFPAis stored;= 'C': the Conjugate-transpose TRANSR of RFPAis stored.UPLOβUPLOisCHARACTER*1;= 'U': upper triangle of RFPAis stored;= 'L': lower triangle of RFPAis stored.
N πΈ
N is INTEGER. The order of the matrix A. N >= 0.
A π
A is COMPLEX*16 array, dimension ( N*(N+1)/2 );
On entry, the Hermitian matrix A in RFP format. RFP format is described by TRANSR, UPLO, and N as follows: if TRANSR = 'N' then RFP A is (0:N,0:k-1) when N is even; k=N/2. RFP A is (0:N-1,0:k) when N is odd; k=N/2. If TRANSR = 'C' then RFP is the Conjugate-transpose of RFP A as defined when TRANSR = 'N'. The contents of RFP A are defined by UPLO as follows: if UPLO = 'U' the RFP A contains the nt elements of upper packed A. If UPLO = 'L' the RFP A contains the elements of lower packed A. The LDA of RFP A is (N+1)/2 when TRANSR = 'C'. When TRANSR is 'N' the LDA is N+1 when N is even and N is odd. See the Note below for more details.
On exit, if INFO = 0, the factor U or L from the Cholesky factorization RFP A = U**H*U or RFP A = L*L**H.
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 is not positive, and the factorization could not be completed.
Further Notes on RFP Format π§
Okay bestie, this is the part where the diagrams come out. No cap, theyβre important.
We first consider Standard Packed Format when N is even. We give an example where N = 6.
AP is Upper AP is Lower
00 01 02 03 04 05 00
11 12 13 14 15 10 11
22 23 24 25 20 21 22
33 34 35 30 31 32 33
44 45 40 41 42 43 44
55 50 51 52 53 54 55
Let TRANSR = 'N'. RFP holds AP as follows: for UPLO = 'U' the upper trapezoid A(0:5,0:2) consists of the last three columns of AP upper. The lower triangle A(4:6,0:2) consists of conjugate-transpose of the first three columns of AP upper. For UPLO = 'L' the lower trapezoid A(1:6,0:2) consists of the first three columns of AP lower. The upper triangle A(0:2,0:2) consists of conjugate-transpose of the last three columns of AP lower. To denote conjugate we place -- above the element. This covers the case N even and TRANSR = 'N'.
RFP A RFP A
-- -- --
03 04 05 33 43 53
-- --
13 14 15 00 44 54
--
23 24 25 10 11 55
33 34 35 20 21 22
--
00 44 45 30 31 32
-- --
01 11 55 40 41 42
-- -- --
02 12 22 50 51 52
Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-transpose of RFP A above. One therefore gets:
RFP A RFP A
-- -- -- -- -- -- -- -- -- --
03 13 23 33 00 01 02 33 00 10 20 30 40 50
-- -- -- -- -- -- -- -- -- --
04 14 24 34 44 11 12 43 44 11 21 31 41 51
-- -- -- -- -- -- -- -- -- --
05 15 25 35 45 55 22 53 54 55 22 32 42 52
We next consider Standard Packed Format when N is odd. We give an example where N = 5.
AP is Upper AP is Lower
00 01 02 03 04 00
11 12 13 14 10 11
22 23 24 20 21 22
33 34 30 31 32 33
44 40 41 42 43 44
Let TRANSR = 'N'. RFP holds AP as follows: for UPLO = 'U' the upper trapezoid A(0:4,0:2) consists of the last three columns of AP upper. The lower triangle A(3:4,0:1) consists of conjugate-transpose of the first two columns of AP upper. For UPLO = 'L' the lower trapezoid A(0:4,0:2) consists of the first three columns of AP lower. The upper triangle A(0:1,1:2) consists of conjugate-transpose of the last two columns of AP lower. To denote conjugate we place -- above the element. This covers the case N odd and TRANSR = 'N'.
RFP A RFP A
-- --
02 03 04 00 33 43
--
12 13 14 10 11 44
22 23 24 20 21 22
--
00 33 34 30 31 32
-- --
01 11 44 40 41 42
Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-transpose of RFP A above. One therefore gets:
RFP A RFP A
-- -- -- -- -- -- -- -- --
02 12 22 00 01 00 10 20 30 40 50
-- -- -- -- -- -- -- -- --
03 13 23 33 11 33 11 21 31 41 51
-- -- -- -- -- -- -- -- --
04 14 24 34 44 43 44 22 32 42 52
Author π
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Definition at line 210 of file zpftrf.f. π
Definition at line 210 of file zpftrf.f.
Author (auto-generated) π
Generated automatically by Doxygen for LAPACK from the source code.
Bye bestie β this page is serving LAPACK Version 3.12.0 energy, and the footer said pftrf(3), so thatβs the vibe weβre leaving you with πβ¨
π¦ 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