tbmv(3)

๐Ÿ’… tbmv(3) โ€” Library Functions Manual โœจ

okay bestie, buckle up โ€” this is tbmv from the tbmv(3) manual page, and it's a whole family of routines, not just one. Four of them, actually. We're doing triangular matrix-vector multiply and it's lowkey iconic. Let's get into it ๐Ÿซถ


๐ŸŒธ NAME ๐ŸŒธ

tbmv โ€” tbmv: triangular matrix-vector multiply


โœจ SYNOPSIS โœจ

๐ŸŽ€ Functions

  • subroutine ctbmv (uplo, trans, diag, n, k, a, lda, x, incx) โ€” CTBMV
  • subroutine dtbmv (uplo, trans, diag, n, k, a, lda, x, incx) โ€” DTBMV
  • subroutine stbmv (uplo, trans, diag, n, k, a, lda, x, incx) โ€” STBMV
  • subroutine ztbmv (uplo, trans, diag, n, k, a, lda, x, incx) โ€” ZTBMV

๐Ÿฆ‹ Detailed Description ๐Ÿฆ‹

(no cap, that's genuinely all it says here โ€” the real tea is below)

๐Ÿ‘‘ Function Documentation ๐Ÿ‘‘


๐ŸŒˆ subroutine ctbmv (character uplo, character trans, character diag, integer n, integer k, complex, dimension(lda,*) a, integer lda, complex, dimension(*) x, integer incx) ๐ŸŒˆ

CTBMV

๐Ÿ’– Purpose:

!>
!> CTBMV  performs one of the matrix-vector operations
!>
!>    x := A*x,   or   x := A**T*x,   or   x := A**H*x,
!>
!> where x is an n element vector and  A is an n by n unit, or non-unit,
!> upper or lower triangular band matrix, with ( k + 1 ) diagonals.
!>

๐ŸŽ€ Parameters

UPLO

!>          UPLO is CHARACTER*1
!>           On entry, UPLO specifies whether the matrix is an upper or
!>           lower triangular matrix as follows:
!>
!>              UPLO = 'U' or 'u'   A is an upper triangular matrix.
!>
!>              UPLO = 'L' or 'l'   A is a lower triangular matrix.
!>

TRANS

!>          TRANS is CHARACTER*1
!>           On entry, TRANS specifies the operation to be performed as
!>           follows:
!>
!>              TRANS = 'N' or 'n'   x := A*x.
!>
!>              TRANS = 'T' or 't'   x := A**T*x.
!>
!>              TRANS = 'C' or 'c'   x := A**H*x.
!>

DIAG

!>          DIAG is CHARACTER*1
!>           On entry, DIAG specifies whether or not A is unit
!>           triangular as follows:
!>
!>              DIAG = 'U' or 'u'   A is assumed to be unit triangular.
!>
!>              DIAG = 'N' or 'n'   A is not assumed to be unit
!>                                  triangular.
!>

N

!>          N is INTEGER
!>           On entry, N specifies the order of the matrix A.
!>           N must be at least zero.
!>

K

!>          K is INTEGER
!>           On entry with UPLO = 'U' or 'u', K specifies the number of
!>           super-diagonals of the matrix A.
!>           On entry with UPLO = 'L' or 'l', K specifies the number of
!>           sub-diagonals of the matrix A.
!>           K must satisfy  0 .le. K.
!>

A

!>          A is COMPLEX array, dimension ( LDA, N ).
!>           Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
!>           by n part of the array A must contain the upper triangular
!>           band part of the matrix of coefficients, supplied column by
!>           column, with the leading diagonal of the matrix in row
!>           ( k + 1 ) of the array, the first super-diagonal starting at
!>           position 2 in row k, and so on. The top left k by k triangle
!>           of the array A is not referenced.
!>           The following program segment will transfer an upper
!>           triangular band matrix from conventional full matrix storage
!>           to band storage:
!>
!>                 DO 20, J = 1, N
!>                    M = K + 1 - J
!>                    DO 10, I = MAX( 1, J - K ), J
!>                       A( M + I, J ) = matrix( I, J )
!>              10    CONTINUE
!>              20 CONTINUE
!>
!>           Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
!>           by n part of the array A must contain the lower triangular
!>           band part of the matrix of coefficients, supplied column by
!>           column, with the leading diagonal of the matrix in row 1 of
!>           the array, the first sub-diagonal starting at position 1 in
!>           row 2, and so on. The bottom right k by k triangle of the
!>           array A is not referenced.
!>           The following program segment will transfer a lower
!>           triangular band matrix from conventional full matrix storage
!>           to band storage:
!>
!>                 DO 20, J = 1, N
!>                    M = 1 - J
!>                    DO 10, I = J, MIN( N, J + K )
!>                       A( M + I, J ) = matrix( I, J )
!>              10    CONTINUE
!>              20 CONTINUE
!>
!>           Note that when DIAG = 'U' or 'u' the elements of the array A
!>           corresponding to the diagonal elements of the matrix are not
!>           referenced, but are assumed to be unity.
!>

LDA

!>          LDA is INTEGER
!>           On entry, LDA specifies the first dimension of A as declared
!>           in the calling (sub) program. LDA must be at least
!>           ( k + 1 ).
!>

X

!>          X is COMPLEX array, dimension at least
!>           ( 1 + ( n - 1 )*abs( INCX ) ).
!>           Before entry, the incremented array X must contain the n
!>           element vector x. On exit, X is overwritten with the
!>           transformed vector x.
!>

INCX

!>          INCX is INTEGER
!>           On entry, INCX specifies the increment for the elements of
!>           X. INCX must not be zero.
!>

๐Ÿ’œ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

โญ Further Details:

!>
!>  Level 2 Blas routine.
!>  The vector and matrix arguments are not referenced when N = 0, or M = 0
!>
!>  -- Written on 22-October-1986.
!>     Jack Dongarra, Argonne National Lab.
!>     Jeremy Du Croz, Nag Central Office.
!>     Sven Hammarling, Nag Central Office.
!>     Richard Hanson, Sandia National Labs.
!>

Definition at line 185 of file ctbmv.f.


๐ŸŒˆ subroutine dtbmv (character uplo, character trans, character diag, integer n, integer k, double precision, dimension(lda,*) a, integer lda, double precision, dimension(*) x, integer incx) ๐ŸŒˆ

DTBMV

๐Ÿ’– Purpose:

!>
!> DTBMV  performs one of the matrix-vector operations
!>
!>    x := A*x,   or   x := A**T*x,
!>
!> where x is an n element vector and  A is an n by n unit, or non-unit,
!> upper or lower triangular band matrix, with ( k + 1 ) diagonals.
!>

๐ŸŽ€ Parameters

UPLO

!>          UPLO is CHARACTER*1
!>           On entry, UPLO specifies whether the matrix is an upper or
!>           lower triangular matrix as follows:
!>
!>              UPLO = 'U' or 'u'   A is an upper triangular matrix.
!>
!>              UPLO = 'L' or 'l'   A is a lower triangular matrix.
!>

TRANS

!>          TRANS is CHARACTER*1
!>           On entry, TRANS specifies the operation to be performed as
!>           follows:
!>
!>              TRANS = 'N' or 'n'   x := A*x.
!>
!>              TRANS = 'T' or 't'   x := A**T*x.
!>
!>              TRANS = 'C' or 'c'   x := A**T*x.
!>

DIAG

!>          DIAG is CHARACTER*1
!>           On entry, DIAG specifies whether or not A is unit
!>           triangular as follows:
!>
!>              DIAG = 'U' or 'u'   A is assumed to be unit triangular.
!>
!>              DIAG = 'N' or 'n'   A is not assumed to be unit
!>                                  triangular.
!>

N

!>          N is INTEGER
!>           On entry, N specifies the order of the matrix A.
!>           N must be at least zero.
!>

K

!>          K is INTEGER
!>           On entry with UPLO = 'U' or 'u', K specifies the number of
!>           super-diagonals of the matrix A.
!>           On entry with UPLO = 'L' or 'l', K specifies the number of
!>           sub-diagonals of the matrix A.
!>           K must satisfy  0 .le. K.
!>

A

!>          A is DOUBLE PRECISION array, dimension ( LDA, N )
!>           Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
!>           by n part of the array A must contain the upper triangular
!>           band part of the matrix of coefficients, supplied column by
!>           column, with the leading diagonal of the matrix in row
!>           ( k + 1 ) of the array, the first super-diagonal starting at
!>           position 2 in row k, and so on. The top left k by k triangle
!>           of the array A is not referenced.
!>           The following program segment will transfer an upper
!>           triangular band matrix from conventional full matrix storage
!>           to band storage:
!>
!>                 DO 20, J = 1, N
!>                    M = K + 1 - J
!>                    DO 10, I = MAX( 1, J - K ), J
!>                       A( M + I, J ) = matrix( I, J )
!>              10    CONTINUE
!>              20 CONTINUE
!>
!>           Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
!>           by n part of the array A must contain the lower triangular
!>           band part of the matrix of coefficients, supplied column by
!>           column, with the leading diagonal of the matrix in row 1 of
!>           the array, the first sub-diagonal starting at position 1 in
!>           row 2, and so on. The bottom right k by k triangle of the
!>           array A is not referenced.
!>           The following program segment will transfer a lower
!>           triangular band matrix from conventional full matrix storage
!>           to band storage:
!>
!>                 DO 20, J = 1, N
!>                    M = 1 - J
!>                    DO 10, I = J, MIN( N, J + K )
!>                       A( M + I, J ) = matrix( I, J )
!>              10    CONTINUE
!>              20 CONTINUE
!>
!>           Note that when DIAG = 'U' or 'u' the elements of the array A
!>           corresponding to the diagonal elements of the matrix are not
!>           referenced, but are assumed to be unity.
!>

LDA

โ€ฆand bestie, the LDA deets for DTBMV are literally where this part cuts off ๐Ÿ’€ keep scrolling into part 2, it picks right back up ๐Ÿงš

LDA

LDA is INTEGER. On entry, LDA tells the routine the first dimension of A as declared in the calling (sub) program. LDA must be at least ( k + 1 ). like, that's the floor, bestie, don't go under it ๐Ÿ’…

X

X is a DOUBLE PRECISION array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the n element vector x. On exit, X is overwritten with the transformed vector x. โœจ so yeah, it comes back different โ€” that's the whole point, that's the transformation slay

INCX

INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. ๐Ÿšซ fr fr, zero is not the vibe

๐Ÿซถ Author

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

๐Ÿฆ‹ Further Details:

!>
!>  Level 2 Blas routine.
!>  The vector and matrix arguments are not referenced when N = 0, or M = 0
!>
!>  -- Written on 22-October-1986.
!>     Jack Dongarra, Argonne National Lab.
!>     Jeremy Du Croz, Nag Central Office.
!>     Sven Hammarling, Nag Central Office.
!>     Richard Hanson, Sandia National Labs.
!>

okay so Level 2 Blas routine โ€” that's the classification, and the vector and matrix arguments are not referenced when N = 0, or M = 0. And these absolute icons wrote it on 22-October-1986: Jack Dongarra (Argonne National Lab), Jeremy Du Croz (Nag Central Office), Sven Hammarling (Nag Central Office), Richard Hanson (Sandia National Labs). legends, all of them ๐Ÿ‘‘

Definition at line 185 of file dtbmv.f.


๐ŸŒธ subroutine stbmv ๐ŸŒธ

subroutine stbmv (character uplo, character trans, character diag, integer
    n, integer k, real, dimension(lda,*) a, integer lda, real, dimension(*)
    x, integer incx)

โญ STBMV

๐Ÿ’– Purpose:

!>
!> STBMV  performs one of the matrix-vector operations
!>
!>    x := A*x,   or   x := A**T*x,
!>
!> where x is an n element vector and  A is an n by n unit, or non-unit,
!> upper or lower triangular band matrix, with ( k + 1 ) diagonals.
!>

so STBMV does one of these matrix-vector ops โ€” x := A*x, or x := A**T*x โ€” where x is an n element vector and A is an n by n unit, or non-unit, upper or lower triangular band matrix, with ( k + 1 ) diagonals. that's the whole gig ๐Ÿ’ซ

โœจ Parameters

UPLO

UPLO is CHARACTER*1. On entry, UPLO specifies whether the matrix is an upper or lower triangular matrix, like this:

  • UPLO = 'U' or 'u' โ€” A is an upper triangular matrix.
  • UPLO = 'L' or 'l' โ€” A is a lower triangular matrix.

TRANS

TRANS is CHARACTER*1. On entry, TRANS specifies the operation to be performed, as follows:

  • TRANS = 'N' or 'n' โ€” x := A*x.
  • TRANS = 'T' or 't' โ€” x := A**T*x.
  • TRANS = 'C' or 'c' โ€” x := A**T*x.

note that for the real version, 'C' gives you A**T too โ€” no conjugate here, it's all real, there's nothing to conjugate ๐Ÿ’€

DIAG

DIAG is CHARACTER*1. On entry, DIAG specifies whether or not A is unit triangular, as follows:

  • DIAG = 'U' or 'u' โ€” A is assumed to be unit triangular.
  • DIAG = 'N' or 'n' โ€” A is not assumed to be unit triangular.

N

N is INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero. (zero is allowed, she's flexible ๐Ÿซถ)

K

K is INTEGER. On entry with UPLO = 'U' or 'u', K specifies the number of super-diagonals of the matrix A. On entry with UPLO = 'L' or 'l', K specifies the number of sub-diagonals of the matrix A. K must satisfy 0 .le. K. โญ

A

A is a REAL array, dimension ( LDA, N ).

Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) by n part of the array A must contain the upper triangular band part of the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row ( k + 1 ) of the array, the first super-diagonal starting at position 2 in row k, and so on. The top left k by k triangle of the array A is not referenced. The following program segment will transfer an upper triangular band matrix from conventional full matrix storage to band storage:

!>                 DO 20, J = 1, N
!>                    M = K + 1 - J
!>                    DO 10, I = MAX( 1, J - K ), J
!>                       A( M + I, J ) = matrix( I, J )
!>              10    CONTINUE
!>              20 CONTINUE
!>

Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) by n part of the array A must contain the lower triangular band part of the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row 1 of the array, the first sub-diagonal starting at position 1 in row 2, and so on. The bottom right k by k triangle of the array A is not referenced. The following program segment will transfer a lower triangular band matrix from conventional full matrix storage to band storage:

!>                 DO 20, J = 1, N
!>                    M = 1 - J
!>                    DO 10, I = J, MIN( N, J + K )
!>                       A( M + I, J ) = matrix( I, J )
!>              10    CONTINUE
!>              20 CONTINUE
!>
โš ๏ธ Note that when DIAG = 'U' or 'u' the elements of the array A corresponding to the diagonal elements of the matrix are not referenced, but are assumed to be unity. so like... don't stress about writing them, they're lowkey imaginary ones ๐Ÿ“

LDA

LDA is INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least ( k + 1 ). same rule as before, bestie, it's a hard floor ๐Ÿ’…

X

X is a REAL array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the n element vector x. On exit, X is overwritten with the transformed vector x. โœจ icon behaviour honestly

INCX

INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. ๐Ÿšซ

๐Ÿซถ Author

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

๐Ÿฆ‹ Further Details:

!>
!>  Level 2 Blas routine.
!>  The vector and matrix arguments are not referenced when N = 0, or M = 0
!>
!>  -- Written on 22-October-1986.
!>     Jack Dongarra, Argonne National Lab.
!>     Jeremy Du Croz, Nag Central Office.
!>     Sven Hammarling, Nag Central Office.
!>     Richard Hanson, Sandia National Labs.
!>

again with the Level 2 Blas routine tag, and again: the vector and matrix arguments are not referenced when N = 0, or M = 0. Written on 22-October-1986 by Jack Dongarra (Argonne National Lab), Jeremy Du Croz (Nag Central Office), Sven Hammarling (Nag Central Office), Richard Hanson (Sandia National Labs). ๐Ÿ’œ

Definition at line 185 of file stbmv.f.


๐Ÿ’œ subroutine ztbmv ๐Ÿ’œ

subroutine ztbmv (character uplo, character trans, character diag, integer
    n, integer k, complex*16, dimension(lda,*) a, integer lda, complex*16,
    dimension(*) x, integer incx)

โญ ZTBMV

๐Ÿ’– Purpose:

!>
!> ZTBMV  performs one of the matrix-vector operations
!>
!>    x := A*x,   or   x := A**T*x,   or   x := A**H*x,
!>
!> where x is an n element vector and  A is an n by n unit, or non-unit,
!> upper or lower triangular band matrix, with ( k + 1 ) diagonals.
!>

okay the complex one, she's the main character ๐Ÿ‘‘ โ€” ZTBMV performs one of the matrix-vector operations x := A*x, or x := A**T*x, or x := A**H*x, where x is an n element vector and A is an n by n unit, or non-unit, upper or lower triangular band matrix, with ( k + 1 ) diagonals. three flavours instead of two because complex is extra like that ๐Ÿฆ‹๐Ÿ’…

โœจ Parameters

UPLO

UPLO is CHARACTER*1. On entry, UPLO specifies whether the matrix is an upper or lower triangular matrix, as follows:

  • UPLO = 'U' or 'u' โ€” A is an upper triangular matrix.
  • UPLO = 'L' or 'l' โ€” A is a lower triangular matrix.

TRANS

TRANS is CHARACTER*1. On entry, TRANS specifies the operation to be performed, as follows:

  • TRANS = 'N' or 'n' โ€” x := A*x.
  • TRANS = 'T' or 't' โ€” x := A**T*x.
  • TRANS = 'C' or 'c' โ€” x := A**H*x.

and this is where she differs, bestie โ€” for the complex version, 'C' actually gives you the conjugate transpose A**H. the glow-up is real ๐Ÿ˜ญ๐Ÿ”ฅ

DIAG

DIAG is CHARACTER*1. On entry, DIAG specifies whether or not A is unit triangular, as follows:

  • DIAG = 'U' or 'u' โ€” A is assumed to be unit triangular.
  • DIAG = 'N' or 'n' โ€” A is not assumed to be unit triangular.

N

N is INTEGER. On entry, N specifies the order of the matrix A. N must be at least zero. โญ

K

K is INTEGER. On entry with UPLO = 'U' or 'u', K specifies the number of super-diagonals of the matrix A. On entry with UPLO = 'L' or 'l', K specifies the number of sub-diagonals of the matrix A. K must satisfy 0 .le. K. ๐Ÿ’ซ

A

๐Ÿงฎ A

okay so A is a COMPLEX*16 array, dimension ( LDA, N ). No cap. Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) by n part of the array A must contain the upper triangular band part of the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row ( k + 1 ) of the array, the first super-diagonal starting at position 2 in row k, and so on. The top left k by k triangle of the array A is not referenced. The following program segment will transfer an upper triangular band matrix from conventional full matrix storage to band storage:

                DO 20, J = 1, N
                   M = K + 1 - J
                   DO 10, I = MAX( 1, J - K ), J
                      A( M + I, J ) = matrix( I, J )
             10    CONTINUE
             20 CONTINUE

and then before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) by n part of the array A must contain the lower triangular band part of the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row 1 of the array, the first sub-diagonal starting at position 1 in row 2, and so on. The bottom right k by k triangle of the array A is not referenced. The following program segment will transfer a lower triangular band matrix from conventional full matrix storage to band storage:

                DO 20, J = 1, N
                   M = 1 - J
                   DO 10, I = J, MIN( N, J + K )
                      A( M + I, J ) = matrix( I, J )
             10    CONTINUE
             20 CONTINUE
๐Ÿซถ Note that when DIAG = 'U' or 'u' the elements of the array A corresponding to the diagonal elements of the matrix are not referenced, but are assumed to be unity.

๐Ÿงฑ LDA

LDA is INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least ( k + 1 ). Like, don't skimp on it.

๐Ÿฆ‹ X

X is COMPLEX*16 array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Before entry, the incremented array X must contain the n element vector x. On exit, X is overwritten with the transformed vector x. She gets a whole glow-up on the way out, lowkey.

๐ŸŽ€ INCX

INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. fr fr.


๐Ÿ‘‘ Author

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

๐Ÿ”Ž Further Details:

Level 2 Blas routine.

The vector and matrix arguments are not referenced when N = 0, or M = 0.

โ€” Written on 22-October-1986.

  • Jack Dongarra, Argonne National Lab.
  • Jeremy Du Croz, Nag Central Office.
  • Sven Hammarling, Nag Central Office.
  • Richard Hanson, Sandia National Labs.

Definition at line 185 of file ztbmv.f.

๐Ÿค– Author

Generated automatically by Doxygen for LAPACK from the source code.


โœจ Footer vibe check: LAPACK Version 3.12.0, page tbmv(3) โ€” thatโ€™s the source/version sign-off, bestie. bye ๐Ÿ’–

๐Ÿ“ฆ where this page comes from