ZHPTRI(3)

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

πŸ’œ ZHPTRI(3) β€” like, the LAPACK packed-Hermitian-inverse girlies' manual πŸ’œ

okay bestie, pull up a chair πŸŽ€ this one lives in the LAPACK library β€” it's a Fortran source file, zhptri.f, straight out of the build tree at /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zhptri.f. that's the NAME section, and yes it's literally just a path, we love a low-effort moment πŸ’…


✨ SYNOPSIS ✨

🫢 Functions/Subroutines

subroutine ZHPTRI (uplo, n, ap, ipiv, work, info)

ZHPTRI β€” that's her. that's the main character πŸ‘‘


🌸 Function/Subroutine Documentation 🌸

subroutine ZHPTRI (character uplo, integer n, complex*16, dimension( * ) ap,
    integer, dimension( * ) ipiv, complex*16, dimension( * ) work, integer
    info)

ZHPTRI. iconic. no notes. ✨

πŸ¦‹ Purpose

!> !> ZHPTRI computes the inverse of a complex Hermitian indefinite matrix !> A in packed storage using the factorization A = U*D*U**H or !> A = L*D*L**H computed by ZHPTRF. !>

like, she takes the factorization that ZHPTRF already did and flips it into an actual inverse. no cap, that's the whole job 🫑

πŸŽ€ Parameters

UPLO

!> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**H; !> = 'L': Lower triangular, form is A = L*D*L**H. !>

one character, huge responsibilities. tell her which triangle you kept the factorization in and she'll handle the rest πŸ’…

N

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

the order of A. and it's N >= 0 β€” so zero is allowed, don't be weird about it.

AP

!> AP is COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the block diagonal matrix D and the multipliers !> used to obtain the factor U or L as computed by ZHPTRF, !> stored as a packed triangular matrix. !> !> On exit, if INFO = 0, the (Hermitian) inverse of the original !> matrix, stored as a packed triangular matrix. The j-th column !> of inv(A) is stored in the array AP as follows: !> if UPLO = 'U', AP(i + (j-1)*j/2) = inv(A)(i,j) for 1<=i<=j; !> if UPLO = 'L', !> AP(i + (j-1)*(2n-j)/2) = inv(A)(i,j) for j<=i<=n. !>

okay this is the big one πŸ‘‘ bestie she is a transformation girlie:

  • on entry she's holding the block diagonal matrix D and the multipliers that made U or L, exactly as ZHPTRF computed them, packed triangular style.
  • on exit, if INFO = 0, she's been fully reborn as the (Hermitian) inverse of the original matrix, also packed triangular. glow-up fr fr πŸ”₯

and here's exactly where every entry of inv(A) lands, no guessing:

  • if UPLO = 'U': AP(i + (j-1)*j/2) = inv(A)(i,j) for 1<=i<=j
  • if UPLO = 'L': AP(i + (j-1)*(2n-j)/2) = inv(A)(i,j) for j<=i<=n

dimension is (N*(N+1)/2), she's not huge, she's just packed πŸŽ€

IPIV

!> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by ZHPTRF. !>

all the tea about the interchanges and the block structure of D, straight from ZHPTRF. don't touch it, it's already been decided πŸ’€

WORK

!> WORK is COMPLEX*16 array, dimension (N) !>

scratch space, COMPLEX*16, length N. she's just there to hold things while the magic happens 🧚

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) = 0; the matrix is singular and its !> inverse could not be computed. !>

the vibe check at the end 🌈:

  • = 0 β€” slay, successful exit ✨
  • < 0 β€” if INFO = -i, the i-th argument had an illegal value, someone did not read the docs 😭
  • > 0 β€” if INFO = i, then D(i,i) = 0; the matrix is singular and its inverse could not be computed. no inverse for you, bestie, it literally does not exist πŸ’€

πŸ‘‘ Author

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

the academic royalty behind all of this 🫢


πŸ“Œ Definition at line 108 of file zhptri.f.

she's defined at line 108 of zhptri.f. that's her address, respect it πŸŽ€

⭐ Author (yes, again)

generated automatically by Doxygen for LAPACK from the source code πŸ€– like, nobody hand-wrote this one, it spawned itself.


real talk: every single number, index formula, and bracket above is load-bearing. if you're actually calling this, get UPLO, the packed layout, and IPIV right, or the singular case will absolutely humble you 😭

okay that's the whole page, mwah πŸ’‹ β€” brought to you by LAPACK, Version 3.12.0, dated /home/abui...RC/zhptri.f(3), generated automatically by Doxygen from the source code. go forth and invert, bestie πŸ’–πŸ¦‹πŸŒΈ

πŸ“¦ where this page comes from