SDBTRF(3)

πŸ“¦ version 1.5, in ubuntu jammy

πŸ’– SDBTRF(3) β€” bestie edition πŸ’–

okay so. you're here because you need an LU factorization of a real m-by-n band matrix A, and you specifically do not want partial pivoting or row interchanges happening behind your back. no cap. SDBTRF has got you. 🫢


✨ NAME ✨

SDBTRF β€” compute an LU factorization of a real m-by-n band matrix A without using partial pivoting or row interchanges.


🌸 SYNOPSIS 🌸

SUBROUTINE SDBTRF( M, N, KL, KU, AB, LDAB, INFO )
    INTEGER INFO, KL, KU, LDAB, M, N
    REAL AB( LDAB, * )

πŸ¦‹ PURPOSE πŸ¦‹

Sdbtrf computes an LU factorization of a real m-by-n band matrix A without using partial pivoting or row interchanges. that's the whole job, and she does it. πŸ’…


πŸŽ€ DESCRIPTION πŸŽ€

This is the blocked version of the algorithm, calling Level 3 BLAS. so like, the fast one. the one that actually respects your cache. icon behaviour fr fr. πŸ”₯


πŸ‘‘ ARGUMENTS πŸ‘‘

  • M (input) INTEGER β€” the number of rows of the matrix A. M >= 0.
  • N (input) INTEGER β€” the number of columns of the matrix A. N >= 0.
  • KL (input) INTEGER β€” the number of subdiagonals within the band of A. KL >= 0.
  • KU (input) INTEGER β€” the number of superdiagonals within the band of A. KU >= 0.
  • AB (input/output) REAL array, dimension (LDAB,N) β€” okay this one's the main character, let's break it down.

On entry, this holds the matrix A in band storage, sitting in rows KL+1 to 2*KL+KU+1. rows 1 to KL of the array? they need not be set. do not stress about them. πŸ™ˆ

The j-th column of A is stored in the j-th column of the array AB like this:

AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)

On exit, you get the details of the factorization, and here's the tea β˜•: 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, bestie, I'm not gatekeeping.

  • LDAB (input) INTEGER β€” the leading dimension of the array AB. LDAB >= 2*KL+KU+1. she said what she said. πŸ’…
  • INFO (output) INTEGER β€” the vibe report. three possible moods:
    • = 0: successful exit. slay. ✨
    • < 0: if INFO = -i, the i-th argument had an illegal value. somebody typed something wrong, and it was not me. 😭
    • > 0: if INFO = +i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. so like... she finished, but she's singular, and dividing by zero is a whole situation. πŸ’€

🌈 THE BAND STORAGE SCHEME 🌈

here's the picture, when M = N = 6, KL = 2, KU = 1:

On entry: On exit:

    *   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   *    *
Array elements marked * are not used by the routine. ignore them, they're just standing there. 🧚

and that's the whole page, periodt. πŸ’œ this one comes out of the library's manual set, with the version and date tucked down at the very bottom of the original like every good manpage keeps them β€” so mwah, go factor something banded, and remember: no pivoting, no row swaps, no drama. πŸŒΈπŸ’…πŸ¦‹

πŸ“¦ where this page comes from