SRC/zlatrd.f(3)
π zlatrd.f β SRC/zlatrd.f(3)
okay so bestie, sit down, because this one is a LAPACK internal routine and it's lowkey iconic. it lives in SRC/zlatrd.f, and it does exactly one job extremely well. let's get into it π«Ά
β¨ SYNOPSIS β¨
πΈ Functions/Subroutines
subroutine zlatrd (uplo, n, nb, a, lda, e, tau, w, ldw)β ZLATRD reduces the first nb rows and columns of a symmetric/Hermitian matrix A to real tridiagonal form by an unitary similarity transformation.
π Function/Subroutine Documentation π
subroutine zlatrd (character uplo, integer n, integer nb, complex*16,
dimension( lda, * ) a, integer lda, double precision, dimension( * ) e,
complex*16, dimension( * ) tau, complex*16, dimension( ldw, * ) w,
integer ldw)
same vibe as above: ZLATRD reduces the first nb rows and columns of a symmetric/Hermitian matrix A to real tridiagonal form by an unitary similarity transformation. she's an overachiever, we stan π
π₯ Purpose π₯
okay so here's the whole point of her existence:
ZLATRD reduces NB rows and columns of a complex Hermitian matrix A to Hermitian tridiagonal form by a unitary similarity transformation Q**H * A * Q, and returns the matrices V and W which are needed to apply the transformation to the unreduced part of A. If UPLO = 'U', ZLATRD reduces the last NB rows and columns of a matrix, of which the upper triangle is supplied; if UPLO = 'L', ZLATRD reduces the first NB rows and columns of a matrix, of which the lower triangle is supplied. This is an auxiliary routine called by ZHETRD.
translation: she's the bestie that ZHETRD calls when it needs the job done. no cap. β¨
π¦ Parameters π¦
UPLOβUPLO is CHARACTER*1. tells you whether the upper or lower triangular part of the Hermitian matrixAis stored:= 'U': Upper triangular= 'L': Lower triangular
NβN is INTEGER. the order of the matrixA. πNBβNB is INTEGER. the number of rows and columns to be reduced. like, how many of them are getting the glow-up.AβA is COMPLEX*16 array, dimension (LDA,N). on entry, the Hermitian matrixA. ifUPLO = 'U', the leading n-by-n upper triangular part ofAcontains the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced. ifUPLO = 'L', the leading n-by-n lower triangular part ofAcontains the lower triangular part of the matrixA, and the strictly upper triangular part ofAis not referenced. on exit:- if
UPLO = 'U', the lastNBcolumns have been reduced to tridiagonal form, with the diagonal elements overwriting the diagonal elements ofA; the elements above the diagonal with the arrayTAU, represent the unitary matrixQas a product of elementary reflectors; - if
UPLO = 'L', the firstNBcolumns have been reduced to tridiagonal form, with the diagonal elements overwriting the diagonal elements ofA; the elements below the diagonal with the arrayTAU, represent the unitary matrixQas a product of elementary reflectors. See Further Details. π
- if
LDAβLDA is INTEGER. the leading dimension of the arrayA.LDA >= max(1,N). don't try to be cute with this one, the bound is the bound. πEβE is DOUBLE PRECISION array, dimension (N-1). ifUPLO = 'U',E(n-nb:n-1)contains the superdiagonal elements of the lastNBcolumns of the reduced matrix; ifUPLO = 'L',E(1:nb)contains the subdiagonal elements of the firstNBcolumns of the reduced matrix.TAUβTAU is COMPLEX*16 array, dimension (N-1). the scalar factors of the elementary reflectors, stored inTAU(n-nb:n-1)ifUPLO = 'U', and inTAU(1:nb)ifUPLO = 'L'. See Further Details. π§WβW is COMPLEX*16 array, dimension (LDW,NB). the n-by-nb matrixWrequired to update the unreduced part ofA. her little helper. πLDWβLDW is INTEGER. the leading dimension of the arrayW.LDW >= max(1,N). again: respect the bound, bestie. π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Further Details π
if UPLO = 'U', the matrix Q is represented as a product of elementary reflectors
Q = H(n) H(n-1) . . . H(n-nb+1).
each H(i) has the form
H(i) = I - tau * v * v**H
where tau is a complex scalar, and v is a complex vector with v(i:n) = 0 and v(i-1) = 1; v(1:i-1) is stored on exit in A(1:i-1,i), and tau in TAU(i-1).
if UPLO = 'L', the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(nb).
each H(i) has the form
H(i) = I - tau * v * v**H
where tau is a complex scalar, and v is a complex vector with v(1:i) = 0 and v(i+1) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), and tau in TAU(i).
the elements of the vectors v together form the n-by-nb matrix V which is needed, with W, to apply the transformation to the unreduced part of the matrix, using a Hermitian rank-2k update of the form: A := A - V*W**H - W*V**H.
the contents of A on exit are illustrated by the following examples with n = 5 and nb = 2:
if UPLO = 'U':
( a a a v4 v5 )
( a a v4 v5 )
( a 1 v5 )
( d 1 )
( d )
if UPLO = 'L':
( d )
( 1 d )
( v1 1 a )
( v1 v2 a a )
( v1 v2 a a a )
where d denotes a diagonal element of the reduced matrix, a denotes an element of the original matrix that is unchanged, and vi denotes an element of the vector defining H(i). literally the whole glow-up documented in ASCII. obsessed. β¨π
π Definition at line 198 of file zlatrd.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
and that's the whole page, bestie π you now know ZLATRD intimately. go forth and reduce some Hermitian matrices. π¦
LAPACK β Version 3.12.0 β SRC/zlatrd.f(3) β¨π
π¦ 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