SRC/dgbbrd.f(3)

✨ SRC/dgbbrd.f ✨

okay bestie, buckle up πŸ’– this is the manual page for SRC/dgbbrd.f β€” and yes, it's giving linear algebra icon energy. the way this routine just reduces a band matrix like it's nothing? obsessed. πŸŽ€


🌸 SYNOPSIS 🌸

πŸ¦‹ Functions/Subroutines

  • subroutine dgbbrd (vect, m, n, ncc, kl, ku, ab, ldab, d, e, q, ldq, pt, ldpt, c, ldc, work, info) β€” literally the whole glow-up, DGBBRD πŸ’…

πŸ’œ Function/Subroutine Documentation

subroutine dgbbrd (character vect, integer m, integer n, integer ncc,
    integer kl, integer ku, 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( ldpt, * ) pt, integer ldpt, double
    precision, dimension( ldc, * ) c, integer ldc, double precision,
    dimension( * ) work, integer info)

DGBBRD πŸ‘‘


🌈 PURPOSE 🌈

!> DGBBRD reduces a real general m-by-n band matrix A to upper !> bidiagonal form B by an orthogonal transformation: Q**T * A * P = B. !> The routine computes B, and optionally forms Q or P**T, or computes !> Q**T*C for a given matrix C.

so basically it takes your whole band matrix situation and transforms it into upper bidiagonal form β€” main character energy fr fr. it computes B, and if you're feeling fancy you can also get it to form Q or P**T for you, or even compute Q**T*C for some matrix C you brought along. no cap, that's a lot of utility in one subroutine. πŸ”₯


πŸŽ€ PARAMETERS πŸŽ€

πŸ’… VECT

!> VECT is CHARACTER*1 !> Specifies whether or not the matrices Q and P**T are to be !> formed. !> = 'N': do not form Q or P**T; !> = 'Q': form Q only; !> = 'P': form P**T only; !> = 'B': form both.

okay so this is the vibe-check parameter β€” it decides whether you want Q, P**T, both, or honestly neither (lowkey valid). 🫢

  • 'N' β€” do not form Q or P**T, we're keeping it minimal
  • 'Q' β€” form Q only, just the one icon
  • 'P' β€” form P**T only, a solo moment
  • 'B' β€” form both, because why not have it all πŸ’–

πŸ“ M

!> M is INTEGER !> The number of rows of the matrix A. M >= 0.

the row count, bestie. M >= 0. periodt.

🧚 N

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

the column count. N >= 0. that's it, that's the girl. ✨

🌸 NCC

!> NCC is INTEGER !> The number of columns of the matrix C. NCC >= 0.

how many columns matrix C is serving. NCC >= 0.

πŸ‘‘ KL

!> KL is INTEGER !> The number of subdiagonals of the matrix A. KL >= 0.

the subdiagonal count β€” the stuff hanging below the main diagonal. KL >= 0.

⭐ KU

!> KU is INTEGER !> The number of superdiagonals of the matrix A. KU >= 0.

the superdiagonal count β€” the stuff floating above. KU >= 0.

πŸ¦‹ AB

!> AB is DOUBLE PRECISION array, dimension (LDAB,N) !> On entry, the m-by-n band matrix A, stored in rows 1 to !> KL+KU+1. The j-th column of A is stored in the j-th column of !> the array AB as follows: !> AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl). !> On exit, A is overwritten by values generated during the !> reduction.

this is where your band matrix A lives, stored in rows 1 to KL+KU+1. mapping is:

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

and heads up β€” on exit, A gets overwritten by the values generated during the reduction. not me warning you that your original data is gone πŸ’€ it's fine it's fine, that's just how it is.

🌈 LDAB

!> LDAB is INTEGER !> The leading dimension of the array A. LDAB >= KL+KU+1.

the leading dimension of the array A. rule is LDAB >= KL+KU+1. iconic constraint, don't ignore it.

πŸŽ€ D

!> D is DOUBLE PRECISION array, dimension (min(M,N)) !> The diagonal elements of the bidiagonal matrix B.

the diagonal elements of B β€” the actual main characters of the bidiagonal result. dimension is min(M,N).

🌸 E

!> E is DOUBLE PRECISION array, dimension (min(M,N)-1) !> The superdiagonal elements of the bidiagonal matrix B.

the superdiagonal elements of B. dimension is min(M,N)-1 β€” yes it's one shorter, that's not a typo, that's just math bestie.

πŸ’œ Q

!> Q is DOUBLE PRECISION array, dimension (LDQ,M) !> If VECT = 'Q' or 'B', the m-by-m orthogonal matrix Q. !> If VECT = 'N' or 'P', the array Q is not referenced.

the m-by-m orthogonal matrix Q β€” but only if VECT = 'Q' or 'B'. if VECT = 'N' or 'P', Q is simply not referenced. ignore her, she's not on stage rn. πŸ’…

🫢 LDQ

!> LDQ is INTEGER !> The leading dimension of the array Q. !> LDQ >= max(1,M) if VECT = 'Q' or 'B'; LDQ >= 1 otherwise.

rules: LDQ >= max(1,M) if VECT = 'Q' or 'B'; otherwise LDQ >= 1.

πŸ”₯ PT

!> PT is DOUBLE PRECISION array, dimension (LDPT,N) !> If VECT = 'P' or 'B', the n-by-n orthogonal matrix P'. !> If VECT = 'N' or 'Q', the array PT is not referenced.

PT holds the n-by-n orthogonal matrix P' when VECT = 'P' or 'B'. if VECT = 'N' or 'Q', PT is not referenced β€” again, off duty. πŸ™ˆ

🧚 LDPT

!> LDPT is INTEGER !> The leading dimension of the array PT. !> LDPT >= max(1,N) if VECT = 'P' or 'B'; LDPT >= 1 otherwise.

rules: LDPT >= max(1,N) if VECT = 'P' or 'B'; otherwise LDPT >= 1.

πŸ“ C

!> C is DOUBLE PRECISION array, dimension (LDC,NCC) !> On entry, an m-by-ncc matrix C. !> On exit, C is overwritten by Q**T*C. !> C is not referenced if NCC = 0.

on entry it's your m-by-ncc matrix C, and on exit it gets overwritten by Q**T*C. if NCC = 0, C isn't referenced at all. so if you didn't bring a C, nobody's mad. ✨

⭐ LDC

!> LDC is INTEGER !> The leading dimension of the array C. !> LDC >= max(1,M) if NCC > 0; LDC >= 1 if NCC = 0.

rules: LDC >= max(1,M) if NCC > 0; LDC >= 1 if NCC = 0.

πŸ¦‹ WORK

!> WORK is DOUBLE PRECISION array, dimension (2*max(M,N))

scratch workspace, dimension 2*max(M,N). it's giving backstage crew energy β€” you don't see it but the whole show doesn't happen without it. 🫢

πŸ‘‘ INFO

!> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value.

the receipts:

  • 0 β€” successful exit, we ate and left no crumbs πŸ’…
  • < 0 β€” if INFO = -i, the i-th argument had an illegal value. not me checking my inputs 😭

🌟 AUTHOR 🌟

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.


πŸ’– Definition at line 185 of file dgbbrd.f.


πŸŽ€ Author πŸŽ€

Generated automatically by Doxygen for LAPACK from the source code.


okay that's the whole page bestie, you're now fluent in DGBBRD πŸ¦‹πŸ’œ slay, go reduce some matrices. periodt. 🌸

LAPACK Β· Version 3.12.0 Β· xoxo, SRC/dgbbrd.f(3) β€” she ate and left no crumbs πŸ‘‘πŸ’–
πŸ“¦ where this page comes from