/home/abui...RC/zgbsv.f(3)

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

πŸ’… NAME πŸ’…

ok so this is the man page for /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zgbsv.f β€” like, that's literally the whole name, bestie, it's a path and it's living its truth.

It's part of the Library Functions Manual, and it's all about ZGBSV, the icon that solves your linear systems for general band matrices. Fr fr.


✨ SYNOPSIS ✨

🫢 Functions/Subroutines

subroutine ZGBSV (n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)

ZGBSV computes the solution to system of linear equations A * X = B for GB matrices (simple driver). yeah that's the whole vibe πŸ’«


πŸŽ€ Function/Subroutine Documentation πŸŽ€

subroutine ZGBSV (integer n, integer kl, integer ku, integer nrhs,
    complex*16, dimension( ldab, * ) ab, integer ldab, integer, dimension( *
    ) ipiv, complex*16, dimension( ldb, * ) b, integer ldb, integer info)

ZGBSV computes the solution to system of linear equations A * X = B for GB matrices (simple driver) β€” she's a simple driver and she's booked and busy πŸ‘‘

🌸 Purpose 🌸

ok so here's the tea, straight from the source, no cap:

!>
!> ZGBSV computes the solution to a complex system of linear equations
!> A * X = B, where A is a band matrix of order N with KL subdiagonals
!> and KU superdiagonals, and X and B are N-by-NRHS matrices.
!>
!> The LU decomposition with partial pivoting and row interchanges is
!> used to factor A as A = L * U, where L is a product of permutation
!> and unit lower triangular matrices with KL subdiagonals, and U is
!> upper triangular with KL+KU superdiagonals.  The factored form of A
!> is then used to solve the system of equations A * X = B.
!>

like, she factors A into L * U with partial pivoting and row interchanges, then solves A * X = B with the factored form. main character energy tbh πŸ’…

πŸ¦‹ Parameters πŸ¦‹

  • N β€” N is INTEGER. it's the number of linear equations, aka the order of the matrix A. N >= 0. yes, zero is allowed, she's inclusive.
!>          N is INTEGER
!>          The number of linear equations, i.e., the order of the
!>          matrix A.  N >= 0.
!>
  • KL β€” KL is INTEGER. the number of subdiagonals within the band of A. KL >= 0. those are the little guys under the diagonal 🐟
!>          KL is INTEGER
!>          The number of subdiagonals within the band of A.  KL >= 0.
!>
  • KU β€” KU is INTEGER. the number of superdiagonals within the band of A. KU >= 0. and these are the ones over the diagonal, slay ✨
!>          KU is INTEGER
!>          The number of superdiagonals within the band of A.  KU >= 0.
!>
  • NRHS β€” NRHS is INTEGER. the number of right hand sides, aka the number of columns of the matrix B. NRHS >= 0. so many hands to hold 🫢
!>          NRHS is INTEGER
!>          The number of right hand sides, i.e., the number of columns
!>          of the matrix B.  NRHS >= 0.
!>
  • AB β€” AB is COMPLEX*16 array, dimension (LDAB,N). this one's got lore, so buckle up:
    • On entry, the matrix A in band storage, in rows KL+1 to 2*KL+KU+1. rows 1 to KL of the array need not be set (they're just vibing, unbothered).
    • the j-th column of A is stored in the j-th column of the array AB as follows: AB(KL+KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+KL)
    • On exit, details of the factorization: U is stored as an upper triangular band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1, and the multipliers used during the factorization are stored in rows KL+KU+2 to 2*KL+KU+1.
    • See below for further details. (spoiler: the further details are giving iconic, keep scrolling πŸ’–)
!>          AB is COMPLEX*16 array, dimension (LDAB,N)
!>          On entry, the matrix A in band storage, in rows KL+1 to
!>          2*KL+KU+1; rows 1 to KL of the array need not be set.
!>          The j-th column of A is stored in the j-th column of the
!>          array AB as follows:
!>          AB(KL+KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+KL)
!>          On exit, details of the factorization: U is stored as an
!>          upper triangular band matrix with KL+KU superdiagonals in
!>          rows 1 to KL+KU+1, and the multipliers used during the
!>          factorization are stored in rows KL+KU+2 to 2*KL+KU+1.
!>          See below for further details.
!>
  • LDAB β€” LDAB is INTEGER. the leading dimension of the array AB. LDAB >= 2*KL+KU+1. don't skimp on it, she needs the room πŸ’€
!>          LDAB is INTEGER
!>          The leading dimension of the array AB.  LDAB >= 2*KL+KU+1.
!>
  • IPIV β€” IPIV is INTEGER array, dimension (N). the pivot indices that define the permutation matrix P; row i of the matrix was interchanged with row IPIV(i). it's literally the receipts of who swapped with who πŸ™ˆ
!>          IPIV is INTEGER array, dimension (N)
!>          The pivot indices that define the permutation matrix P;
!>          row i of the matrix was interchanged with row IPIV(i).
!>
  • B β€” B is COMPLEX*16 array, dimension (LDB,NRHS). On entry, the N-by-NRHS right hand side matrix B. On exit, if INFO = 0, the N-by-NRHS solution matrix X. glow-up arc fr fr πŸ¦‹
!>          B is COMPLEX*16 array, dimension (LDB,NRHS)
!>          On entry, the N-by-NRHS right hand side matrix B.
!>          On exit, if INFO = 0, the N-by-NRHS solution matrix X.
!>
  • LDB β€” LDB is INTEGER. the leading dimension of the array B. LDB >= max(1,N). noted. respect the max(1,N). 🌈
!>          LDB is INTEGER
!>          The leading dimension of the array B.  LDB >= max(1,N).
!>
  • INFO β€” INFO is INTEGER. the vibe check of the whole operation:
    • = 0: successful exit πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value 😬
    • > 0: if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and the solution has not been computed. πŸ’€ like, she tried, but the math said no.
!>          INFO is INTEGER
!>          = 0:  successful exit
!>          < 0:  if INFO = -i, the i-th argument had an illegal value
!>          > 0:  if INFO = i, U(i,i) is exactly zero.  The factorization
!>                has been completed, but the factor U is exactly
!>                singular, and the solution has not been computed.
!>

πŸ‘‘ Author πŸ‘‘

the absolute legends behind this:

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

we stan all four, no notes 🫢

⭐ Further Details: ⭐

ok this is the part where she shows you the band storage scheme with an actual example, and honestly? it's giving art. when M = N = 6, KL = 2, KU = 1:

!>
!>  The band storage scheme is illustrated by the following example, when
!>  M = N = 6, KL = 2, KU = 1:
!>
!>  On entry:                       On exit:
!>
!>      *    *    *    +    +    +       *    *    *   u14  u25  u36
!>      *    *    +    +    +    +       *    *   u13  u24  u35  u46
!>      *   a12  a23  a34  a45  a56      *   u12  u23  u34  u45  u56
!>     a11  a22  a33  a44  a55  a66     u11  u22  u33  u44  u55  u66
!>     a21  a32  a43  a54  a65   *      m21  m32  m43  m54  m65   *
!>     a31  a42  a53  a64   *    *      m31  m42  m53  m64   *    *
!>

and the key, bestie, don't skip it:

!>
!>  Array elements marked * are not used by the routine; elements marked
!>  + need not be set on entry, but are required by the routine to store
!>  elements of U because of fill-in resulting from the row interchanges.
!>

so * = ignored, she's not looking at those. + = you don't gotta set 'em going in, but the routine needs them to stash U because of fill-in from the row interchanges. it's giving necessary chaos 😭

Definition at line 161 of file zgbsv.f.

🌸 a lil sign-off 🌸

this page was generated automatically by Doxygen for LAPACK from the source code β€” no humans hand-wrote this, she's self-made ✨

and the footer tea: LAPACK, Version 3.12.0, /home/abui...RC/zgbsv.f(3) β€” that's the source/version and the file, periodt. πŸ’–πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from