trmv(3)

πŸ’… trmv(3) β€” straight out of the Library Functions Manual ✨

okay bestie, buckle up, because this is the triangular matrix-vector multiply situation and it's genuinely iconic. no cap. 🫢


🌸 NAME 🌸

trmv β€” trmv: triangular matrix-vector multiply. that's literally the whole thing, it does exactly what it says on the tin πŸ’–


πŸŽ€ SYNOPSIS πŸŽ€

✨ Functions ✨

  • subroutine ctrmv (uplo, trans, diag, n, a, lda, x, incx) β€” CTRMV
  • subroutine dtrmv (uplo, trans, diag, n, a, lda, x, incx) β€” DTRMV
  • subroutine strmv (uplo, trans, diag, n, a, lda, x, incx) β€” STRMV
  • subroutine ztrmv (uplo, trans, diag, n, a, lda, x, incx) β€” ZTRMV

like, yes, it's the same argument list four times. that's the bit. four flavors of the same serve πŸ’…


🌈 Detailed Description 🌈

(that's it, that's the whole description up here β€” the real tea is all in the function docs below, bestie πŸ“)


πŸ‘‘ Function Documentation πŸ‘‘

πŸ¦‹ subroutine ctrmv (character uplo, character trans, character diag, integer n, complex, dimension(lda,) a, integer lda, complex, dimension() x, integer incx) πŸ¦‹

πŸ’œ CTRMV

⭐ Purpose:

!>
!> CTRMV  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 matrix.
!>

so it picks up your vector x and your triangular matrix A and multiplies them, and you get to choose whether A shows up as-is, transposed, or conjugate-transposed. main character energy, three ways to slay πŸ”₯

🎯 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.
!>

(okay this is the complex one, so 'C' gives you the conjugate transpose β€” A**H. clock that, bestie, it matters 😭)

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.
!>

A

!>          A is COMPLEX array, dimension ( LDA, N ).
!>           Before entry with  UPLO = 'U' or 'u', the leading n by n
!>           upper triangular part of the array A must contain the upper
!>           triangular matrix and the strictly lower triangular part of
!>           A is not referenced.
!>           Before entry with UPLO = 'L' or 'l', the leading n by n
!>           lower triangular part of the array A must contain the lower
!>           triangular matrix and the strictly upper triangular part of
!>           A is not referenced.
!>           Note that when  DIAG = 'U' or 'u', the diagonal elements of
!>           A are not referenced either, but are assumed to be unity.
!>

lowkey the vibe here is: the half of the matrix you didn't declare? not referenced. doesn't exist. we simply do not look at it πŸ™ˆ and if DIAG = 'U', the diagonal itself is also not referenced β€” it's just assumed to be unity. ghost diagonal. iconic.

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
!>           max( 1, n ).
!>

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.
!>

heads up: X gets overwritten on exit. it's not a "returns a new vector" situation, it's a "your vector now" situation. πŸ’€

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 146 of file ctrmv.f.


πŸ¦‹ subroutine dtrmv (character uplo, character trans, character diag, integer n, double precision, dimension(lda,) a, integer lda, double precision, dimension() x, integer incx) πŸ¦‹

πŸ’œ DTRMV

⭐ Purpose:

!>
!> DTRMV  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 matrix.
!>

note: only two options here, bestie. no A**H for the real one β€” there's literally nothing to conjugate 🌸

🎯 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.
!>

yup, for the double precision version 'C' and 'T' both mean x := A**T*x. same destination, different spelling ✨

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.
!>

A

!>          A is DOUBLE PRECISION array, dimension ( LDA, N )
!>           Before entry with  UPLO = 'U' or 'u', the leading n by n
!>           upper triangular part of the array A must contain the upper
!>           triangular matrix and the strictly lower triangular part of
!>           A is not referenced.
!>           Before entry with UPLO = 'L' or 'l', the leading n by n
!>           lower triangular part of the array A must contain the lower
!>           triangular matrix and the strictly upper triangular part of
!>           A is not referenced.
!>           Note that when  DIAG = 'U' or 'u', the diagonal elements of
!>           A are not referenced either, 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
!>           max( 1, n ).
!>

X

!>          X is 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.
!>

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 146 of file dtrmv.f.


πŸ¦‹ subroutine strmv (character uplo, character trans, character diag, integer n, real, dimension(lda,) a, integer lda, real, dimension() x, integer incx) πŸ¦‹

πŸ’œ STRMV

⭐ Purpose:

!>
!> STRMV  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 matrix.
!>

single precision edition, same serve, still only the two operations πŸŽ€

🎯 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.
!>

A

!>          A is REAL array, dimension ( LDA, N )
!>           Before entry with  UPLO = 'U' or 'u', the leading n by n
!>           upper triangular part of the array A must contain the upper
!>           triangular matrix and the strictly lower triangular part of
!>           A is not referenced.
!>           Before entry with UPLO = 'L' or 'l', the leading n by n
!>           lower triangular part of the array A must contain the lower
!>           triangular matrix and the strictly upper triangular part of
!>           A is not referenced.
!>           Note that when  DIAG = 'U' or 'u', the diagonal elements of
!>           A are not referenced either, but are assumed to be unity.
!>

LDA β€” and okay bestie, this is exactly where part 1 of the page dips out 😭 the LDA breakdown for strmv is literally next, and it picks right back up in part 2. don't go anywhere πŸ’–

okay bestie we're back, still deep in the strmv parameter tea β˜•πŸ’… and the list literally keeps going β€” she's thorough, we respect it πŸ‘‘

  • 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 max( 1, n ). no pressure but also: respect the max( 1, n ) 🫢
  • X β€” X is 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. she gets overwritten, no cap, so don't go looking for your original values after 😭
  • INCX β€” INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. literally it must not be zero, that's the whole rule, do not test her 🚫

πŸ‘‘ Author

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

the whole squad showed up for the credit line, iconic behaviour honestly 🌈

πŸ”₯ Further Details:

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

and then the historical receipts, preserved word for word because these people are legends:

-- 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.

1986 bestie. nineteen eighty six. they were out here doing linear algebra before some of us were even a glimmer ✨ absolute main character energy πŸŽ€

Definition at line 146 of file strmv.f.


πŸ¦‹ ztrmv β€” the COMPLEX*16 one, she's giving double precision complex fantasy πŸ’œ

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

ZTRMV β€” say it with me: zee-tee-are-em-vee. she's the complex cousin and she ate πŸ“

🌸 Purpose:

ZTRMV 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 matrix.

okay so like β€” pick your adventure: plain A*x, transpose A**T*x, or conjugate-transpose A**H*x. three vibes, one subroutine, we love a multitasker πŸ’…βœ¨

πŸŽ€ 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.

the 'C' is the conjugate-transpose one, iykyk πŸ”₯

  • 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 bestie, negative is not πŸ™ˆ
  • A β€” A is COMPLEX*16 array, dimension ( LDA, N ). Before entry with UPLO = 'U' or 'u', the leading n by n upper triangular part of the array A must contain the upper triangular matrix and the strictly lower triangular part of A is not referenced. Before entry with UPLO = 'L' or 'l', the leading n by n lower triangular part of the array A must contain the lower triangular matrix and the strictly upper triangular part of A is not referenced. Note that when DIAG = 'U' or 'u', the diagonal elements of A are not referenced either, but are assumed to be unity.

so half of your array is literally just vibing, untouched, not referenced, living its best life πŸ¦‹

  • 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 max( 1, n ).
  • 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. again: overwritten, gone, replaced, she's transformed now πŸ’«
  • INCX β€” INCX is INTEGER. On entry, INCX specifies the increment for the elements of X. INCX must not be zero. same rule, same energy, do not pass 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.

same date, same legends, different precision. consistency is so underrated honestly πŸ’–

Definition at line 146 of file ztrmv.f.


✨ Author

Generated automatically by Doxygen for LAPACK from the source code.

not a human bestie, a whole documentation generator did this. respect the automation πŸ§šβ€β™€οΈ


and that's the whole page, we made it πŸŽ‰ take a sip of water, go outside, touch a triangular matrix. this was LAPACK, Version 3.12.0, page trmv(3) β€” section 3 of the manual, served fresh, slay πŸ’…πŸ‘‘πŸŽ€

πŸ“¦ where this page comes from