TESTING/LIN/zpot03.f(3)

πŸ“¦
version 3.12.1 Β· 2 versions
, in arch rolling

πŸ’œ TESTING/LIN/zpot03.f

okay bestie, so this page is literally about TESTING/LIN/zpot03.f β€” yes, the file itself is the name, that's just how LAPACK's Doxygen situation works, iykyk. It's the home of the zpot03 subroutine, and we're gonna go through the whole thing together, no skips, no cap. 🫢


✨ SYNOPSIS ✨

πŸŽ€ Functions/Subroutines

  • subroutine zpot03 (uplo, n, a, lda, ainv, ldainv, work, ldwork, rwork, rcond, resid) β€” that's ZPOT03, the main character of this page πŸ‘‘

🌸 Function/Subroutine Documentation

Here's the full signature, exactly as written, gorgeous:

subroutine zpot03 (character uplo, integer n, complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( ldainv, * ) ainv, integer ldainv, complex*16, dimension( ldwork, * ) work, integer ldwork, double precision, dimension( * ) rwork, double precision rcond, double precision resid)

Yep. That's ZPOT03. She's a big one. πŸ’…

πŸ¦‹ Purpose

!> !> ZPOT03 computes the residual for a Hermitian matrix times its !> inverse: !> norm( I - A*AINV ) / ( N * norm(A) * norm(AINV) * EPS ), !> where EPS is the machine epsilon. !>

So basically it's checking how good your inverse is β€” taking A times AINV, seeing how close that lands to I (the identity, the goal, the dream), and scaling by N * norm(A) * norm(AINV) * EPS. Iconic residual-computing behaviour, honestly. πŸ”₯


🌈 Parameters

⭐ UPLO

!> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> Hermitian matrix A is stored: !> = 'U': Upper triangular !> = 'L': Lower triangular !>

Character times one, bestie. 'U' means upper triangular is the one being stored, 'L' means lower triangular. Pick your fighter. πŸ’…

⭐ N

!> N is INTEGER !> The number of rows and columns of the matrix A. N >= 0.

It's an INTEGER, it's the row count and the column count of A (square matrix things ✨), and the rule is N >= 0. Zero is allowed, don't be weird about it.

⭐ A

!> A is COMPLEX*16 array, dimension (LDA,N) !> The original Hermitian matrix A.

COMPLEX*16 array, dimension (LDA,N), and it's the original Hermitian matrix A. The source material. The blueprint. πŸŽ€

⭐ LDA

!> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N)

INTEGER, leading dimension of A, and the vibe check is LDA >= max(1,N).

⭐ AINV

!> AINV is COMPLEX*16 array, dimension (LDAINV,N) !> On entry, the inverse of the matrix A, stored as a Hermitian !> matrix in the same format as A. !> In this version, AINV is expanded into a full matrix and !> multiplied by A, so the opposing triangle of AINV will be !> changed; i.e., if the upper triangular part of AINV is !> stored, the lower triangular part will be used as work space.

Okay so this one has lore. πŸ“– COMPLEX*16 array, dimension (LDAINV,N). On entry it's the inverse of A, stored as a Hermitian matrix in the same format as A. BUT β€” and this is the important part, don't skip it β€” in this version AINV gets expanded into a full matrix and multiplied by A, so the opposing triangle of AINV will be changed. Like, if the upper triangular part of AINV is stored, the lower triangular part gets used as work space. So don't come crying when half your array is different, she warned you. 😭

⭐ LDAINV

!> LDAINV is INTEGER !> The leading dimension of the array AINV. LDAINV >= max(1,N).

INTEGER, leading dimension of AINV, and the requirement is LDAINV >= max(1,N) β€” note the period at the end, she's thorough. πŸ’…

⭐ WORK

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

That's it. That's the whole description. COMPLEX*16 array, dimension (LDWORK,N). She said what she said. 🫢

⭐ LDWORK

!> LDWORK is INTEGER !> The leading dimension of the array WORK. LDWORK >= max(1,N).

INTEGER, leading dimension of WORK, requirement: LDWORK >= max(1,N).

⭐ RWORK

!> RWORK is DOUBLE PRECISION array, dimension (N)

DOUBLE PRECISION array, dimension (N). Short and sweet, we love a low-maintenance parameter. 🌸

⭐ RCOND

!> RCOND is DOUBLE PRECISION !> The reciprocal of the condition number of A, computed as !> ( 1/norm(A) ) / norm(AINV).

DOUBLE PRECISION. It's the reciprocal of the condition number of A, and it's computed as ( 1/norm(A) ) / norm(AINV). Math girlie behaviour. 🧚

⭐ RESID

!> RESID is DOUBLE PRECISION !> norm(I - A*AINV) / ( N * norm(A) * norm(AINV) * EPS )

DOUBLE PRECISION, and it holds norm(I - A*AINV) / ( N * norm(A) * norm(AINV) * EPS ) β€” the whole point of the whole subroutine, honestly. ⭐


πŸ‘‘ Author

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

Four institutions, one subroutine. Group project that actually worked. πŸ™ˆ


πŸ’€ Definition at line 124 of file zpot03.f.

Yes, that's zpot03.f, line 124. Go look, she's there.


πŸŽ€ Sign-off

This whole page was generated automatically by Doxygen for LAPACK from the source code β€” so like, don't @ me about formatting, a robot did it. And it's from LAPACK, Version 3.12.0, dated to match TESTING/LIN/zpot03.f(3). Slay, bye bestie!! πŸ’–βœ¨πŸ¦‹πŸ“

πŸ“¦ where this page comes from