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)โCTBMVsubroutine dtbmv (uplo, trans, diag, n, k, a, lda, x, incx)โDTBMVsubroutine stbmv (uplo, trans, diag, n, k, a, lda, x, incx)โSTBMVsubroutine 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'โAis an upper triangular matrix.UPLO = 'L' or 'l'โAis 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'โAis assumed to be unit triangular.DIAG = 'N' or 'n'โAis 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 whenDIAG = 'U' or 'u'the elements of the arrayAcorresponding 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'โAis an upper triangular matrix.UPLO = 'L' or 'l'โAis 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'โAis assumed to be unit triangular.DIAG = 'N' or 'n'โAis 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 whenDIAG = 'U'or'u'the elements of the arrayAcorresponding 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
- 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