SRC/dsbtrd.f(3)
π SRC/dsbtrd.f β like, the actual manual page bestie
okay so real talk: this is SRC/dsbtrd.f, straight out of the Library Functions Manual, and it's lowkey one of those files that sounds scary but is honestly giving main character energy once you get it. Let's go π«Ά
β¨ NAME β¨
SRC/dsbtrd.f β that's it, that's the name, no cap. She's a Fortran source file and she knows it π
πΈ SYNOPSIS πΈ
Functions/Subroutines
subroutine dsbtrd (vect, uplo, n, kd, ab, ldab, d, e, q, ldq, work, info)β this is her, this is the girl. Also goes byDSBTRDβ¨
π¦ Function/Subroutine Documentation π¦
subroutine dsbtrd (character vect, character uplo, integer n, integer kd, double precision, dimension( ldab, * ) ab, integer ldab, double precision, dimension( * ) d, double precision, dimension( * ) e, double precision, dimension( ldq, * ) q, integer ldq, double precision, dimension( * ) work, integer info)
aka DSBTRD, the full signature, verbatim, don't @ me π
π Purpose π
!>
!> DSBTRD reduces a real symmetric band matrix A to symmetric
!> tridiagonal form T by an orthogonal similarity transformation:
!> Q**T * A * Q = T.
!>
so basically: symmetric band matrix in, symmetric tridiagonal matrix out, and the whole thing happens via an orthogonal similarity transformation. Q**T * A * Q = T and she ate π₯
π Parameters π
VECT
!> VECT is CHARACTER*1
!> = 'N': do not form Q;
!> = 'V': form Q;
!> = 'U': update a matrix X, by forming X*Q.
!>
VECT is CHARACTER1* and it's literally picking your vibe: 'N' = do not form Q, 'V' = form Q, 'U' = update a matrix X, by forming X*Q. pick your fighter π
UPLO
!> UPLO is CHARACTER*1
!> = 'U': Upper triangle of A is stored;
!> = 'L': Lower triangle of A is stored.
!>
UPLO is CHARACTER1*: 'U' means the Upper triangle of A is stored, 'L' means the Lower triangle of A is stored. up or down, choose wisely β¨
N
!> N is INTEGER
!> The order of the matrix A. N >= 0.
!>
N is INTEGER, the order of the matrix A. Constraint: N >= 0. periodt π
KD
!> KD is INTEGER
!> The number of superdiagonals of the matrix A if UPLO = 'U',
!> or the number of subdiagonals if UPLO = 'L'. KD >= 0.
!>
KD is INTEGER β the number of superdiagonals of the matrix A if UPLO = 'U', or the number of subdiagonals if UPLO = 'L'. Constraint: KD >= 0. she's flexible like that π¦
AB
!> AB is DOUBLE PRECISION array, dimension (LDAB,N)
!> On entry, the upper or lower triangle of the symmetric band
!> matrix A, stored in the first KD+1 rows of the array. The
!> j-th column of A is stored in the j-th column of the array AB
!> as follows:
!> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
!> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).
!> On exit, the diagonal elements of AB are overwritten by the
!> diagonal elements of the tridiagonal matrix T; if KD > 0, the
!> elements on the first superdiagonal (if UPLO = 'U') or the
!> first subdiagonal (if UPLO = 'L') are overwritten by the
!> off-diagonal elements of T; the rest of AB is overwritten by
!> values generated during the reduction.
!>
AB is a DOUBLE PRECISION array, dimension (LDAB,N) and honestly she's the main character here π
On entry she's holding the upper or lower triangle of the symmetric band matrix A, stored in the first KD+1 rows of the array. The j-th column of A lives in the j-th column of the array AB like this:
- if
UPLO = 'U',AB(kd+1+i-j,j) = A(i,j)formax(1,j-kd)<=i<=j; - if
UPLO = 'L',AB(1+i-j,j) = A(i,j)forj<=i<=min(n,j+kd).
On exit? The diagonal elements of AB get overwritten by the diagonal elements of the tridiagonal matrix T. And if KD > 0, the elements on the first superdiagonal (if UPLO = 'U') or the first subdiagonal (if UPLO = 'L') get overwritten by the off-diagonal elements of T. The rest of AB is overwritten by values generated during the reduction. she's been through a whole glow-up, tbh π
LDAB
!> LDAB is INTEGER
!> The leading dimension of the array AB. LDAB >= KD+1.
!>
LDAB is INTEGER, the leading dimension of the array AB. Constraint: LDAB >= KD+1. do not disrespect her β
D
!> D is DOUBLE PRECISION array, dimension (N)
!> The diagonal elements of the tridiagonal matrix T.
!>
D is a DOUBLE PRECISION array, dimension (N) β the diagonal elements of the tridiagonal matrix T. she's the main diagonal and she's thriving π
E
!> E is DOUBLE PRECISION array, dimension (N-1)
!> The off-diagonal elements of the tridiagonal matrix T:
!> E(i) = T(i,i+1) if UPLO = 'U'; E(i) = T(i+1,i) if UPLO = 'L'.
!>
E is a DOUBLE PRECISION array, dimension (N-1) β the off-diagonal elements of the tridiagonal matrix T:
E(i) = T(i,i+1)ifUPLO = 'U'E(i) = T(i+1,i)ifUPLO = 'L'
she's off the diagonal and she's iconic β¨
Q
!> Q is DOUBLE PRECISION array, dimension (LDQ,N)
!> On entry, if VECT = 'U', then Q must contain an N-by-N
!> matrix X; if VECT = 'N' or 'V', then Q need not be set.
!>
!> On exit:
!> if VECT = 'V', Q contains the N-by-N orthogonal matrix Q;
!> if VECT = 'U', Q contains the product X*Q;
!> if VECT = 'N', the array Q is not referenced.
!>
Q is a DOUBLE PRECISION array, dimension (LDQ,N) π
On entry: if VECT = 'U', then Q must contain an N-by-N matrix X; if VECT = 'N' or 'V', then Q need not be set. (no pressure bestie)
On exit, the lore:
- if
VECT = 'V', Q contains the N-by-N orthogonal matrix Q; - if
VECT = 'U', Q contains the product X*Q; - if
VECT = 'N', the array Q is not referenced. she's literally not even invited to the party π
LDQ
!> LDQ is INTEGER
!> The leading dimension of the array Q.
!> LDQ >= 1, and LDQ >= N if VECT = 'V' or 'U'.
!>
LDQ is INTEGER, the leading dimension of the array Q. Constraints: LDQ >= 1, and LDQ >= N if VECT = 'V' or 'U'. read the room π
WORK
!> WORK is DOUBLE PRECISION array, dimension (N)
!>
WORK is a DOUBLE PRECISION array, dimension (N). that's it. she works. π
INFO
!> INFO is INTEGER
!> = 0: successful exit
!> < 0: if INFO = -i, the i-th argument had an illegal value
!>
INFO is INTEGER β the vibe check at the end:
= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
the whole squad, contributing, we love to see it π«Ά
π Further Details: π
!>
!> Modified by Linda Kaufman, Bell Labs.
!>
shoutout Linda Kaufman at Bell Labs, she modified it, we stan π
β Definition at line 161 of file dsbtrd.f. β
literally line 161, in dsbtrd.f, that's where she lives π‘
π§ Author π§
Generated automatically by Doxygen for LAPACK from the source code. no human hands, just vibes and a build script π€β¨
ok that's the whole page, nothing skipped, nothing dropped, every flag and constraint and line number intact. she's thorough π
LAPACK Β· Version 3.12.0 Β· SRC/dsbtrd.f(3) β mwah, that's the footer, and that's the tea π byeee bestie, go reduce some band matrices π¦π
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms