SRC/slatrd.f(3)
π SRC/slatrd.f(3) β Library Functions Manual β¨
π NAME
SRC/slatrd.f
okay so this is the page for SRC/slatrd.f β the slatrd subroutine. sheβs iconic, sheβs auxiliary, and sheβs about to reduce some matrix rows and columns. π
β¨ SYNOPSIS
π§ Functions/Subroutines
subroutine slatrd (uplo, n, nb, a, lda, e, tau, w, ldw)βSLATRDreduces the firstnbrows and columns of a symmetric/Hermitian matrixAto real tridiagonal form by an orthogonal similarity transformation.
π Function/Subroutine Documentation
subroutine slatrd (character uplo, integer n, integer nb, real, dimension( lda, * ) a, integer lda, real, dimension( * ) e, real, dimension( * ) tau, real, dimension( ldw, * ) w, integer ldw)
SLATRD reduces the first nb rows and columns of a symmetric/Hermitian matrix A to real tridiagonal form by an orthogonal similarity transformation.
π¦ Purpose:
okay bestie, hereβs the actual lore: SLATRD reduces NB rows and columns of a real symmetric matrix A to symmetric tridiagonal form by an orthogonal similarity transformation Q**T * 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',SLATRDreduces the lastNBrows and columns of a matrix, of which the upper triangle is supplied. - if
UPLO = 'L',SLATRDreduces the firstNBrows and columns of a matrix, of which the lower triangle is supplied.
This is an auxiliary routine called by SSYTRD. periodt.
π Parameters
UPLOβUPLO is CHARACTER*1. Specifies whether the upper or lower triangular part of the symmetric 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.AβA is REAL array, dimension (LDA,N). On entry, the symmetric matrixA. IfUPLO = 'U', the leadingn-by-nupper triangular part ofAcontains the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced. IfUPLO = 'L', the leadingn-by-nlower 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 orthogonal 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 orthogonal matrixQas a product of elementary reflectors. See Further Details.
- if
LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= (1,N).EβE is REAL 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 REAL 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 REAL array, dimension (LDW,NB). Then-by-nbmatrixWrequired to update the unreduced part ofA.LDWβLDW is INTEGER. The leading dimension of the arrayW.LDW >= max(1,N).
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π₯ Further Details:
okay, this is the part where the reflectors get their moment. π
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**T
where tau is a real scalar, and v is a real 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**T
where tau is a real scalar, and v is a real 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 symmetric rank-2k update of the form:
A := A - V*W**T - W*V**T.
The contents of A on exit are illustrated by the following examples with n = 5 and nb = 2:
if UPLO = 'U': if UPLO = 'L':
( a a a v4 v5 ) ( d )
( a a v4 v5 ) ( 1 d )
( a 1 v5 ) ( v1 1 a )
( d 1 ) ( v1 v2 a a )
( d ) ( 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).
π Definition
Definition at line 197 of file slatrd.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code.
π Thatβs the whole page, bestie. Itβs LAPACK Version 3.12.0, source file SRC/slatrd.f(3) β go slay your tridiagonal reduction. π
β¨
π¦ 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