ZPPTRF(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

πŸ¦‹ ZPPTRF(3) β€” the Cholesky glow-up for packed Hermitian matrices πŸ’…

okay so this page lives in the Library Functions Manual, and the file it's documenting is literally:

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zpptrf.f

yes bestie, that's the whole path, we're not shortening it, it's iconic in its own chaotic way πŸŽ€


✨ SYNOPSIS ✨

Functions/Subroutines

subroutine ZPPTRF (uplo, n, ap, info)

ZPPTRF β€” that's her, that's the whole name πŸ’–


🌸 Function/Subroutine Documentation 🌸

subroutine ZPPTRF (character uplo, integer n, complex*16, dimension( * ) ap,
    integer info)

ZPPTRF. again. she contains multitudes 😌

🫢 Purpose:

!>
!> ZPPTRF computes the Cholesky factorization of a complex Hermitian
!> positive definite matrix A stored in packed format.
!>
!> 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.
!>

so basically: complex Hermitian, positive definite, packed format, and she factorizes it Cholesky-style. the two forms are A = U**H * U when UPLO = 'U', and A = L * L**H when UPLO = 'L' β€” U upper triangular, L lower triangular. no cap, that's the whole vibe check πŸ”₯


🧚 Parameters

UPLO

!>          UPLO is CHARACTER*1
!>          = 'U':  Upper triangle of A is stored;
!>          = 'L':  Lower triangle of A is stored.
!>
  • 'U' β€” upper triangle of A is the one being stored πŸ’œ
  • 'L' β€” lower triangle of A is the one being stored 🌸

N

!>          N is INTEGER
!>          The order of the matrix A.  N >= 0.
!>

it's the order of matrix A, and N >= 0 β€” the bar is on the floor but we respect it ⭐

AP

!>          AP is COMPLEX*16 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.
!>          See below for further details.
!>
!>          On exit, if INFO = 0, the triangular factor U or L from the
!>          Cholesky factorization A = U**H*U or A = L*L**H, in the same
!>          storage format as A.
!>

so AP is a COMPLEX*16 array, dimension (N*(N+1)/2), and here's the thing bestie β€” the indexing is doing the most:

  • on entry it's the upper or lower triangle of the Hermitian matrix A, packed columnwise in a linear array
  • the j-th column of A lives in AP like this:
    • 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
  • and yeah, "see below for further details" β€” we do go below, don't worry 🫢
  • on exit, if INFO = 0, you get the triangular factor U or L from the Cholesky factorization A = U**H*U or A = L*L**H, in the same storage format as A β€” she keeps her silhouette πŸ’…

INFO

!>          INFO is INTEGER
!>          = 0:  successful exit
!>          < 0:  if INFO = -i, the i-th argument had an illegal value
!>          > 0:  if INFO = i, the leading principal minor of order i
!>                is not positive, and the factorization could not be
!>                completed.
!>
  • = 0 β€” successful exit, we ate, nobody's crying πŸŽ€
  • < 0 β€” INFO = -i means the i-th argument had an illegal value (so somebody handed her bad input, rude)
  • > 0 β€” INFO = i means the leading principal minor of order i is not positive, and the factorization could not be completed β€” this is the "not positive definite" jumpscare 😭

πŸ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

the whole squad, credited, periodt 🌈


πŸ’€ Further Details:

!>
!>  The packed storage scheme is illustrated by the following example
!>  when N = 4, UPLO = 'U':
!>
!>  Two-dimensional storage of the Hermitian matrix A:
!>
!>     a11 a12 a13 a14
!>         a22 a23 a24
!>             a33 a34     (aij = conjg(aji))
!>                 a44
!>
!>  Packed storage of the upper triangle of A:
!>
!>  AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]
!>

okay this is the part that makes packed storage click, fr fr. N = 4, UPLO = 'U':

the 2-D storage of the Hermitian matrix A looks like a little staircase because the lower half is just the conjugate β€” (aij = conjg(aji)) β€” so why store it twice?? we don't πŸ’…

and then packed storage of the upper triangle is literally just:

AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]

columns, squished, boujeely efficient. she's giving "no wasted storage" πŸ¦‹


πŸ“ Definition at line 118 of file zpptrf.f.


🌟 Author (of this whole rendering situation)

Generated automatically by Doxygen for LAPACK from the source code. not a human, just vibes and a parser πŸ€–βœ¨


πŸ’– reminder bestie: every number, index, and INFO code above is exactly as the source says it. do not come for the math, the math did nothing wrong.

and that's the page!! 🌈 it's from LAPACK, Version 3.12.0, and the file it came from is /home/abui...RC/zpptrf.f(3) β€” mwah, thank you for reading, go factorize something positive definite πŸ“πŸ’œπŸŽ€

πŸ“¦ where this page comes from