labrd(3)
labrd β a step in gebrd π
okay bestie, this one's from the Library Functions Manual and it's the glow-up page for labrd, aka the little helper that does one iconic step inside gebrd. buckle up π
β¨ NAME β¨
labrd β literally what it says: a step in gebrd. π¦
β¨ SYNOPSIS β¨
πΈ Functions πΈ
subroutine clabrd (m, n, nb, a, lda, d, e, tauq, taup, x, ldx, y, ldy)β CLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form. πsubroutine dlabrd (m, n, nb, a, lda, d, e, tauq, taup, x, ldx, y, ldy)β DLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form. πsubroutine slabrd (m, n, nb, a, lda, d, e, tauq, taup, x, ldx, y, ldy)β SLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form. πsubroutine zlabrd (m, n, nb, a, lda, d, e, tauq, taup, x, ldx, y, ldy)β ZLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form. π
β¨ Detailed Description β¨
hii so this page has a whole Detailed Description section and then a Function Documentation section, and that second one is where all the actual tea is β β every subroutine gets its own glow-up down there. π
β¨ Function Documentation β¨
π¦ subroutine clabrd (integer m, integer n, integer nb, complex, dimension( lda, * ) a, integer lda, real, dimension( * ) d, real, dimension( * ) e, complex, dimension( * ) tauq, complex, dimension( * ) taup, complex, dimension( ldx, * ) x, integer ldx, complex, dimension( ldy, * ) y, integer ldy)
CLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form. no cap, that's the whole gig. π
β Purpose:
!>
!> CLABRD reduces the first NB rows and columns of a complex general
!> m by n matrix A to upper or lower real bidiagonal form by a unitary
!> transformation Q**H * A * P, and returns the matrices X and Y which
!> are needed to apply the transformation to the unreduced part of A.
!>
!> If m >= n, A is reduced to upper bidiagonal form; if m < n, to lower
!> bidiagonal form.
!>
!> This is an auxiliary routine called by CGEBRD
!>
like, it's the auxiliary routine β the supporting character that's actually carrying the whole plot π called by CGEBRD, and it hands back X and Y so the untouched part of A can get updated later. bestie behaviour fr fr π«Ά
β Parameters
MβMis INTEGER, the number of rows in the matrixA. π
!> M is INTEGER
!> The number of rows in the matrix A.
!>
NβNis INTEGER, the number of columns in the matrixA. π
!> N is INTEGER
!> The number of columns in the matrix A.
!>
NBβNBis INTEGER, the number of leading rows and columns ofAthat we're reducing. π―
!> NB is INTEGER
!> The number of leading rows and columns of A to be reduced.
!>
AβAis COMPLEX array, dimension(LDA,N). on entry it's the m by n general matrix to be reduced; on exit the firstNBrows and columns get overwritten and the rest of the array is untouched, periodt. ifm >= n, the elements on and below the diagonal in the firstNBcolumns (together with the arrayTAUQ) represent the unitary matrixQas a product of elementary reflectors, and the elements above the diagonal in the firstNBrows (together with the arrayTAUP) represent the unitary matrixPas a product of elementary reflectors. ifm < n, it flips: elements below the diagonal in the firstNBcolumns withTAUQgive youQ, and elements on and above the diagonal in the firstNBrows withTAUPgive youP. see Further Details π
!> A is COMPLEX array, dimension (LDA,N)
!> On entry, the m by n general matrix to be reduced.
!> On exit, the first NB rows and columns of the matrix are
!> overwritten; the rest of the array is unchanged.
!> If m >= n, elements on and below the diagonal in the first NB
!> columns, with the array TAUQ, represent the unitary
!> matrix Q as a product of elementary reflectors; and
!> elements above the diagonal in the first NB rows, with the
!> array TAUP, represent the unitary matrix P as a product
!> of elementary reflectors.
!> If m < n, elements below the diagonal in the first NB
!> columns, with the array TAUQ, represent the unitary
!> matrix Q as a product of elementary reflectors, and
!> elements on and above the diagonal in the first NB rows,
!> with the array TAUP, represent the unitary matrix P as
!> a product of elementary reflectors.
!> See Further Details.
!>
LDAβLDAis INTEGER, the leading dimension of the arrayA.LDA >= max(1,M). π¨ that bound is not a suggestion bestie.
!> LDA is INTEGER
!> The leading dimension of the array A. LDA >= max(1,M).
!>
DβDis REAL array, dimension(NB). the diagonal elements of the firstNBrows and columns of the reduced matrix, withD(i) = A(i,i). π«
!> D is REAL array, dimension (NB)
!> The diagonal elements of the first NB rows and columns of
!> the reduced matrix. D(i) = A(i,i).
!>
EβEis REAL array, dimension(NB). the off-diagonal elements of the firstNBrows and columns of the reduced matrix. π
!> E is REAL array, dimension (NB)
!> The off-diagonal elements of the first NB rows and columns of
!> the reduced matrix.
!>
TAUQβTAUQis COMPLEX array, dimension(NB). the scalar factors of the elementary reflectors that represent the unitary matrixQ. see Further Details. π₯
!> TAUQ is COMPLEX array, dimension (NB)
!> The scalar factors of the elementary reflectors which
!> represent the unitary matrix Q. See Further Details.
!>
TAUPβTAUPis COMPLEX array, dimension(NB). the scalar factors of the elementary reflectors that represent the unitary matrixP. see Further Details. π₯
!> TAUP is COMPLEX array, dimension (NB)
!> The scalar factors of the elementary reflectors which
!> represent the unitary matrix P. See Further Details.
!>
XβXis COMPLEX array, dimension(LDX,NB). the m-by-nb matrixXrequired to update the unreduced part ofA. π§
!> X is COMPLEX array, dimension (LDX,NB)
!> The m-by-nb matrix X required to update the unreduced part
!> of A.
!>
LDXβLDXis INTEGER, the leading dimension of the arrayX.LDX >= max(1,M). π don't play with it.
!> LDX is INTEGER
!> The leading dimension of the array X. LDX >= max(1,M).
!>
YβYis COMPLEX array, dimension(LDY,NB). the n-by-nb matrixYrequired to update the unreduced part ofA. π
!> Y is COMPLEX array, dimension (LDY,NB)
!> The n-by-nb matrix Y required to update the unreduced part
!> of A.
!>
LDYβLDYis INTEGER, the leading dimension of the arrayY.LDY >= max(1,N). π
!> LDY is INTEGER
!> The leading dimension of the array Y. LDY >= max(1,N).
!>
β Author
- Univ. of Tennessee π
- Univ. of California Berkeley π
- Univ. of Colorado Denver π
- NAG Ltd. π
β Further Details:
!>
!> The matrices Q and P are represented as products of elementary
!> reflectors:
!>
!> Q = H(1) H(2) . . . H(nb) and P = G(1) G(2) . . . G(nb)
!>
!> Each H(i) and G(i) has the form:
!>
!> H(i) = I - tauq * v * v**H and G(i) = I - taup * u * u**H
!>
!> where tauq and taup are complex scalars, and v and u are complex
!> vectors.
!>
!> If m >= n, v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on exit in
!> A(i:m,i); u(1:i) = 0, u(i+1) = 1, and u(i+1:n) is stored on exit in
!> A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i).
!>
!> If m < n, v(1:i) = 0, v(i+1) = 1, and v(i+1:m) is stored on exit in
!> A(i+2:m,i); u(1:i-1) = 0, u(i) = 1, and u(i:n) is stored on exit in
!> A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i).
!>
!> The elements of the vectors v and u together form the m-by-nb matrix
!> V and the nb-by-n matrix U**H which are needed, with X and Y, to apply
!> the transformation to the unreduced part of the matrix, using a block
!> update of the form: A := A - V*Y**H - X*U**H.
!>
!> The contents of A on exit are illustrated by the following examples
!> with nb = 2:
!>
!> m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n):
!>
!> ( 1 1 u1 u1 u1 ) ( 1 u1 u1 u1 u1 u1 )
!> ( v1 1 1 u2 u2 ) ( 1 1 u2 u2 u2 u2 )
!> ( v1 v2 a a a ) ( v1 1 a a a a )
!> ( v1 v2 a a a ) ( v1 v2 a a a a )
!> ( v1 v2 a a a ) ( v1 v2 a a a a )
!> ( v1 v2 a a a )
!>
!> where a denotes an element of the original matrix which is unchanged,
!> vi denotes an element of the vector defining H(i), and ui an element
!> of the vector defining G(i).
!>
okay so lowkey the little diagram is the moment β a is an element of the original matrix that's unchanged, vi is an element of the vector defining H(i), and ui is an element of the vector defining G(i). also the block update A := A - V*Y**H - X*U**H is literally the whole reason X and Y exist. iconic. π
Definition at line 210 of file clabrd.f. π
π¦ subroutine dlabrd (integer m, integer n, integer nb, double precision, dimension( lda, * ) a, integer lda, double precision, dimension( * ) d, double precision, dimension( * ) e, double precision, dimension( * ) tauq, double precision, dimension( * ) taup, double precision, dimension( ldx, * ) x, integer ldx, double precision, dimension( ldy, * ) y, integer ldy)
DLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form. the real-precision sibling, same energy. π
β Purpose:
!>
!> DLABRD reduces the first NB rows and columns of a real general
!> m by n matrix A to upper or lower bidiagonal form by an orthogonal
!> transformation Q**T * A * P, and returns the matrices X and Y which
!> are needed to apply the transformation to the unreduced part of A.
!>
!> If m >= n, A is reduced to upper bidiagonal form; if m < n, to lower
!> bidiagonal form.
!>
!> This is an auxiliary routine called by DGEBRD
!>
note the glow-up from clabrd: this one's orthogonal with Q**T instead of unitary with Q**H, and it's called by DGEBRD. same auxiliary energy, different flavour. π
β Parameters
MβMis INTEGER, the number of rows in the matrixA. π
!> M is INTEGER
!> The number of rows in the matrix A.
!>
NβNis INTEGER, the number of columns in the matrixA. π
!> N is INTEGER
!> The number of columns in the matrix A.
!>
NBβNBis INTEGER, the number of leading rows and columns ofAto be reduced. π―
!> NB is INTEGER
!> The number of leading rows and columns of A to be reduced.
!>
AβAis DOUBLE PRECISION array, dimension(LDA,N). on entry, the m by n general matrix to be reduced; on exit, the firstNBrows and columns are overwritten and the rest of the array is unchanged. ifm >= n, the elements on and below the diagonal in the firstNBcolumns, with the arrayTAUQ, represent the orthogonal matrixQas a product of elementary reflectors, and the elements above the diagonal in the firstNBrows, with the arrayTAUP, represent the orthogonal matrixPas a product of elementary reflectors. ifm < n, the elements below the diagonal in the firstNBcolumns, with the arrayTAUQ, represent the orthogonal matrixQas a product of elementary reflectors, and the elements on and above the diagonal in the firstNBrows, with the arrayTAUP, represent the orthogonal matrixPas a product of elementary reflectors. see Further Details π
!> A is DOUBLE PRECISION array, dimension (LDA,N)
!> On entry, the m by n general matrix to be reduced.
!> On exit, the first NB rows and columns of the matrix are
!> overwritten; the rest of the array is unchanged.
!> If m >= n, elements on and below the diagonal in the first NB
!> columns, with the array TAUQ, represent the orthogonal
!> matrix Q as a product of elementary reflectors; and
!> elements above the diagonal in the first NB rows, with the
!> array TAUP, represent the orthogonal matrix P as a product
!> of elementary reflectors.
!> If m < n, elements below the diagonal in the first NB
!> columns, with the array TAUQ, represent the orthogonal
!> matrix Q as a product of elementary reflectors, and
!> elements on and above the diagonal in the first NB rows,
!> with the array TAUP, represent the orthogonal matrix P as
!> a product of elementary reflectors.
!> See Further Details.
!>
LDAβLDAis INTEGER, the leading dimension of the arrayA.LDA >= max(1,M). π¨
!> LDA is INTEGER
!> The leading dimension of the array A. LDA >= max(1,M).
!>
DβDis DOUBLE PRECISION array, dimension(NB). the diagonal elements of the firstNBrows and columns of the reduced matrix, withD(i) = A(i,i). π«
!> D is DOUBLE PRECISION array, dimension (NB)
!> The diagonal elements of the first NB rows and columns of
!> the reduced matrix. D(i) = A(i,i).
!>
EβEis DOUBLE PRECISION array, dimension(NB). the off-diagonal elements of the firstNBrows and columns of the reduced matrix. π
!> E is DOUBLE PRECISION array, dimension (NB)
!> The off-diagonal elements of the first NB rows and columns of
!> the reduced matrix.
!>
TAUQβTAUQis DOUBLE PRECISION array, dimension(NB). the scalar factors of the elementary reflectors that represent the orthogonal matrixQ. see Further Details. π₯
!> TAUQ is DOUBLE PRECISION array, dimension (NB)
!> The scalar factors of the elementary reflectors which
!> represent the orthogonal matrix Q. See Further Details.
!>
TAUPβTAUPis DOUBLE PRECISION array, dimension(NB). the scalar factors of the elementary reflectors that represent the orthogonal matrixP. see Further Details. π₯
!> TAUP is DOUBLE PRECISION array, dimension (NB)
!> The scalar factors of the elementary reflectors which
!> represent the orthogonal matrix P. See Further Details.
!>
XβXis DOUBLE PRECISION array, dimension(LDX,NB). the m-by-nb matrixXrequired to update the unreduced part ofA. π§
!> X is DOUBLE PRECISION array, dimension (LDX,NB)
!> The m-by-nb matrix X required to update the unreduced part
!> of A.
!>
LDXβLDXis INTEGER, the leading dimension of the arrayX... π«Ά
!> LDX is INTEGER
LDXβINTEGER. It's the leading dimension of theXarray, and you needLDX >= max(1,M). Slay those dimensions! β¨YβDOUBLE PRECISIONarray, dimension(LDY,NB). This is then-by-nbmatrixYthat you need to update the unreduced part ofA. It's giving βessential helperβ energy. πLDYβINTEGER. Leading dimension of theYarray, soLDY >= max(1,N). No cap, just facts. π«Ά
πΈ Author πΈ
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π« Further Details π«
Okay so the matrices Q and P are represented as products of elementary reflectors β iconic behavior:
Q = H(1) H(2) . . . H(nb) and P = G(1) G(2) . . . G(nb)
Each H(i) and G(i) has the form:
H(i) = I - tauq * v * v**T and G(i) = I - taup * u * u**T
where tauq and taup are real scalars, and v and u are real vectors. (Yes, even in the double precision dlabrd, the text says βreal scalarsβ β we donβt make the rules, we just report them. π
)
If m >= n, then v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on exit in A(i:m,i); u(1:i) = 0, u(i+1) = 1, and u(i+1:n) is stored on exit in A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i).
If m < n, then v(1:i) = 0, v(i+1) = 1, and v(i+1:m) is stored on exit in A(i+2:m,i); u(1:i-1) = 0, u(i) = 1, and u(i:n) is stored on exit in A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i).
The elements of the vectors v and u together form the m-by-nb matrix V and the nb-by-n matrix U**T which are needed, with X and Y, to apply the transformation to the unreduced part of the matrix, using a block update of the form:
A := A - V*Y**T - X*U**T
The contents of A on exit are illustrated by the following examples with nb = 2:
m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n):
( 1 1 u1 u1 u1 ) ( 1 u1 u1 u1 u1 u1 )
( v1 1 1 u2 u2 ) ( 1 1 u2 u2 u2 u2 )
( v1 v2 a a a ) ( v1 1 a a a a )
( v1 v2 a a a ) ( v1 v2 a a a a )
( v1 v2 a a a ) ( v1 v2 a a a a )
( v1 v2 a a a )
where a denotes an element of the original matrix which is unchanged, vi denotes an element of the vector defining H(i), and ui an element of the vector defining G(i).
Definition at line 208 of file dlabrd.f.
π¦ subroutine slabrd π¦
subroutine slabrd (integer m, integer n, integer nb, real, dimension( lda, *
) a, integer lda, real, dimension( * ) d, real, dimension( * ) e, real,
dimension( * ) tauq, real, dimension( * ) taup, real, dimension( ldx, *
) x, integer ldx, real, dimension( ldy, * ) y, integer ldy)
SLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form. Bestie, it's the real version. β¨
π― Purpose
SLABRD reduces the first NB rows and columns of a real general m by n matrix A to upper or lower bidiagonal form by an orthogonal transformation Q**T * A * P, and returns the matrices X and Y which are needed to apply the transformation to the unreduced part of A.
If m >= n, A is reduced to upper bidiagonal form; if m < n, to lower bidiagonal form.
This is an auxiliary routine called by SGEBRD. So like, it's the backstage crew making the main character shine. π
π Parameters
MβINTEGER. The number of rows in the matrixA. Literally the row count, no cap. πNβINTEGER. The number of columns in the matrixA. The column count, periodt. πNBβINTEGER. The number of leading rows and columns ofAto be reduced. So it's how many you're touching. πAβREALarray, dimension(LDA,N). On entry, them-by-ngeneral matrix to be reduced. On exit, the firstNBrows and columns of the matrix are overwritten; the rest of the array is unchanged.- If
m >= n, elements on and below the diagonal in the firstNBcolumns, with the arrayTAUQ, represent the orthogonal matrixQas a product of elementary reflectors; and elements above the diagonal in the firstNBrows, with the arrayTAUP, represent the orthogonal matrixPas a product of elementary reflectors. - If
m < n, elements below the diagonal in the firstNBcolumns, with the arrayTAUQ, represent the orthogonal matrixQas a product of elementary reflectors, and elements on and above the diagonal in the firstNBrows, with the arrayTAUP, represent the orthogonal matrixPas a product of elementary reflectors. - See Further Details. π«Ά
- If
LDAβINTEGER. The leading dimension of the arrayA.LDA >= max(1,M). Keep it valid, bestie. β¨DβREALarray, dimension(NB). The diagonal elements of the firstNBrows and columns of the reduced matrix. SpecificallyD(i) = A(i,i). So it's the main diagonal glow-up. πEβREALarray, dimension(NB). The off-diagonal elements of the firstNBrows and columns of the reduced matrix. The sidekick energy. πΈTAUQβREALarray, dimension(NB). The scalar factors of the elementary reflectors which represent the orthogonal matrixQ. See Further Details. πTAUPβREALarray, dimension(NB). The scalar factors of the elementary reflectors which represent the orthogonal matrixP. See Further Details. πXβREALarray, dimension(LDX,NB). Them-by-nbmatrixXrequired to update the unreduced part ofA. It's giving βessential update matrixβ. π₯LDXβINTEGER. The leading dimension of the arrayX.LDX >= max(1,M). No shortcuts. πYβREALarray, dimension(LDY,NB). Then-by-nbmatrixYrequired to update the unreduced part ofA. The other half of the update dream team. π¦LDYβINTEGER. The leading dimension of the arrayY.LDY >= max(1,N). Slay those dimensions. β¨
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π« Further Details π«
Okay so this is the same reflector situation as before, but let's run it back for slabrd because it's important. The matrices Q and P are represented as products of elementary reflectors:
Q = H(1) H(2) . . . H(nb) and P = G(1) G(2) . . . G(nb)
Each H(i) and G(i) has the form:
H(i) = I - tauq * v * v**T and G(i) = I - taup * u * u**T
where tauq and taup are real scalars, and v and u are real vectors. (Again, the text says βreal scalarsβ β and for slabrd that's literally true. π
)
If m >= n, then v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on exit in A(i:m,i); u(1:i) = 0, u(i+1) = 1, and u(i+1:n) is stored on exit in A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i).
If m < n, then v(1:i) = 0, v(i+1) = 1, and v(i+1:m) is stored on exit in A(i+2:m,i); u(1:i-1) = 0, u(i) = 1, and u(i:n) is stored on exit in A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i).
The elements of the vectors v and u together form the m-by-nb matrix V and the nb-by-n matrix U**T which are needed, with X and Y, to apply the transformation to the unreduced part of the matrix, using a block update of the form:
A := A - V*Y**T - X*U**T
The contents of A on exit are illustrated by the following examples with nb = 2:
m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n):
( 1 1 u1 u1 u1 ) ( 1 u1 u1 u1 u1 u1 )
( v1 1 1 u2 u2 ) ( 1 1 u2 u2 u2 u2 )
( v1 v2 a a a ) ( v1 1 a a a a )
( v1 v2 a a a ) ( v1 v2 a a a a )
( v1 v2 a a a ) ( v1 v2 a a a a )
( v1 v2 a a a )
where a denotes an element of the original matrix which is unchanged, vi denotes an element of the vector defining H(i), and ui an element of the vector defining G(i).
Definition at line 208 of file slabrd.f.
π§ subroutine zlabrd π§
subroutine zlabrd (integer m, integer n, integer nb, complex*16, dimension(
lda, * ) a, integer lda, double precision, dimension( * ) d, double
precision, dimension( * ) e, complex*16, dimension( * ) tauq,
complex*16, dimension( * ) taup, complex*16, dimension( ldx, * ) x,
integer ldx, complex*16, dimension( ldy, * ) y, integer ldy)
ZLABRD reduces the first nb rows and columns of a general matrix to a bidiagonal form. This is the complex*16 edition, so you know it's fancy. π
π― Purpose
ZLABRD reduces the first NB rows and columns of a complex general m by n matrix A to upper or lower real bidiagonal form by a unitary transformation Q**H * A * P, and returns the matrices X and Y which are needed to apply the transformation to the unreduced part of A.
If m >= n, A is reduced to upper bidiagonal form; if m < n, to lower bidiagonal form.
This is an auxiliary routine called by ZGEBRD. So it's the backstage baddie for the complex case. π
π Parameters
MβINTEGER. The number of rows in the matrixA. Row count, periodt. πNβINTEGER. The number of columns in the matrixA. Column count, no cap. πNBβINTEGER. The number of leading rows and columns ofAto be reduced. How many you're reducing, bestie. πAβCOMPLEX*16array, dimension(LDA,*). (The rest of this parameter's description continues in the next part β stay tuned, it's about to get good! π)AβCOMPLEX*16array, dimension(LDA,N). On entry, itβs thembyngeneral matrix thatβs getting reduced. On exit, the firstNBrows and columns of the matrix are overwritten; the rest of the array is unchanged. Ifm >= n, elements on and below the diagonal in the firstNBcolumns, with the arrayTAUQ, represent the unitary matrixQas a product of elementary reflectors; and elements above the diagonal in the firstNBrows, with the arrayTAUP, represent the unitary matrixPas a product of elementary reflectors. Ifm < n, elements below the diagonal in the firstNBcolumns, with the arrayTAUQ, represent the unitary matrixQas a product of elementary reflectors, and elements on and above the diagonal in the firstNBrows, with the arrayTAUP, represent the unitary matrixPas a product of elementary reflectors. See Further Details. π«ΆLDAβINTEGER. The leading dimension of the arrayA.LDA >= max(1,M). πDβDOUBLE PRECISIONarray, dimension(NB). The diagonal elements of the firstNBrows and columns of the reduced matrix.D(i) = A(i,i). β¨EβDOUBLE PRECISIONarray, dimension(NB). The off-diagonal elements of the firstNBrows and columns of the reduced matrix. π«TAUQβCOMPLEX*16array, dimension(NB). The scalar factors of the elementary reflectors which represent the unitary matrixQ. See Further Details. πTAUPβCOMPLEX*16array, dimension(NB). The scalar factors of the elementary reflectors which represent the unitary matrixP. See Further Details. πXβCOMPLEX*16array, dimension(LDX,NB). Them-by-nbmatrixXrequired to update the unreduced part ofA. πΈLDXβINTEGER. The leading dimension of the arrayX.LDX >= max(1,M). π¦YβCOMPLEX*16array, dimension(LDY,NB). Then-by-nbmatrixYrequired to update the unreduced part ofA. βLDYβINTEGER. The leading dimension of the arrayY.LDY >= max(1,N). π
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Further Details:
Okay bestie, hereβs the lore: the matrices Q and P are represented as products of elementary reflectors:
Q = H(1) H(2) . . . H(nb) and P = G(1) G(2) . . . G(nb)
Each H(i) and G(i) has the form:
H(i) = I - tauq * v * v**H and G(i) = I - taup * u * u**H
where tauq and taup are complex scalars, and v and u are complex vectors. π
If m >= n, v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on exit in A(i:m,i); u(1:i) = 0, u(i+1) = 1, and u(i+1:n) is stored on exit in A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i). π₯
If m < n, v(1:i) = 0, v(i+1) = 1, and v(i+1:m) is stored on exit in A(i+2:m,i); u(1:i-1) = 0, u(i) = 1, and u(i:n) is stored on exit in A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i). π
The elements of the vectors v and u together form the m-by-nb matrix V and the nb-by-n matrix U**H which are needed, with X and Y, to apply the transformation to the unreduced part of the matrix, using a block update of the form: A := A - V*Y**H - X*U**H. π§
The contents of A on exit are illustrated by the following examples with nb = 2:
m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n):
( 1 1 u1 u1 u1 ) ( 1 u1 u1 u1 u1 u1 )
( v1 1 1 u2 u2 ) ( 1 1 u2 u2 u2 u2 )
( v1 v2 a a a ) ( v1 1 a a a a )
( v1 v2 a a a ) ( v1 v2 a a a a )
( v1 v2 a a a ) ( v1 v2 a a a a )
( v1 v2 a a a )
where a denotes an element of the original matrix which is unchanged, vi denotes an element of the vector defining H(i), and ui an element of the vector defining G(i). π
π Definition at line 210 of file zlabrd.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code. π
Thatβs the whole page, bestie β signing off from LAPACK Version 3.12.0, page labrd(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