DTREXC(3)
π¦ DTREXC(3) β dtrexc.f, Library Functions Manual π¦
okay bestie so this is the man page for dtrexc.f from the LAPACK library β the full path is literally /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dtrexc.f and it lives under Library Functions Manual. it's a Fortran thing, but don't panic, it's giving very demure, very mindful once you get the vibe π
β¨ NAME β¨
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dtrexc.f
like, that's the file. that's the whole name section. she's lowkey just a path and honestly? iconic π
πΈ SYNOPSIS πΈ
Functions/Subroutines
subroutine DTREXC (compq, n, t, ldt, q, ldq, ifst, ilst, work, info)
DTREXC
yes bestie that's the whole call. every argument matters, we'll get to them π
π Function/Subroutine Documentation π
subroutine DTREXC (character compq, integer n, double precision, dimension(
ldt, * ) t, integer ldt, double precision, dimension( ldq, * ) q,
integer ldq, integer ifst, integer ilst, double precision, dimension( *
) work, integer info)
DTREXC
β Purpose β
!> !> DTREXC reorders the real Schur factorization of a real matrix !> A = Q*T*QT, so that the diagonal block of T with row index IFST is !> moved to row ILST. !> !> The real Schur form T is reordered by an orthogonal similarity !> transformation ZT*T*Z, and optionally the matrix Q of Schur vectors !> is updated by postmultiplying it with Z. !> !> T must be in Schur canonical form (as returned by DHSEQR), that is, !> block upper triangular with 1-by-1 and 2-by-2 diagonal blocks; each !> 2-by-2 diagonal block has its diagonal elements equal and its !> off-diagonal elements of opposite sign. !>
so basically: take your real Schur factorization A = Q*T*Q**T, and move the diagonal block of T sitting at row IFST over to row ILST. she gets reordered by an orthogonal similarity transformation Z**T*T*Z, and if you want, Q gets postmultiplied by Z too. π§
and forewarning: T must already be in Schur canonical form (the kind DHSEQR hands back), meaning block upper triangular with 1-by-1 and 2-by-2 diagonal blocks, where each 2-by-2 diagonal block has equal diagonal elements and off-diagonal elements of opposite sign. no cap, it's a requirement π«Ά
π Parameters π
COMPQβCOMPQisCHARACTER*1= 'V': update the matrixQof Schur vectors;= 'N': do not updateQ.
NβNisINTEGER- The order of the matrix
T.N >= 0. - If
N == 0argumentsILSTandIFSTmay be any value. (yes, any value. feral behavior but slay π)
- The order of the matrix
TβTisDOUBLE PRECISIONarray, dimension(LDT,N)- On entry, the upper quasi-triangular matrix
T, in Schur canonical form. - On exit, the reordered upper quasi-triangular matrix, again in Schur canonical form.
- On entry, the upper quasi-triangular matrix
LDTβLDTisINTEGER- The leading dimension of the array
T.LDT >= max(1,N).
- The leading dimension of the array
QβQisDOUBLE PRECISIONarray, dimension(LDQ,N)- On entry, if
COMPQ = 'V', the matrixQof Schur vectors. - On exit, if
COMPQ = 'V',Qhas been postmultiplied by the orthogonal transformation matrixZwhich reordersT. - If
COMPQ = 'N',Qis not referenced. (she's not even invited to the function π )
- On entry, if
LDQβLDQisINTEGER- The leading dimension of the array
Q.LDQ >= 1, and ifCOMPQ = 'V',LDQ >= max(1,N).
- The leading dimension of the array
IFSTβIFSTisINTEGERILSTβILSTisINTEGER- Specify the reordering of the diagonal blocks of
T. - The block with row index
IFSTis moved to rowILST, by a sequence of transpositions between adjacent blocks. - On exit, if
IFSTpointed on entry to the second row of a 2-by-2 block, it is changed to point to the first row;ILSTalways points to the first row of the block in its final position (which may differ from its input value by+1or-1). 1 <= IFST <= N;1 <= ILST <= N.
- Specify the reordering of the diagonal blocks of
WORKβWORKisDOUBLE PRECISIONarray, dimension(N)INFOβINFOisINTEGER= 0: successful exit β¨< 0: ifINFO = -i, the i-th argument had an illegal value= 1: two adjacent blocks were too close to swap (the problem is very ill-conditioned);Tmay have been partially reordered, andILSTpoints to the first row of the current position of the block being moved. π this one's the "uh oh, she's ill-conditioned" case, so heads up β partial reordering is genuinely possible here, no cap.
okay real talk:INFO = 1is not a "you did something wrong" error, it's a "these two blocks were too close to swap" situation.Tmight be partially reordered andILSTpoints to the first row of wherever the block currently is. so like, don't assume your matrix is untouched π
π Author π
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Definition at line 146 of file dtrexc.f.
π¦ Author π¦
Generated automatically by Doxygen for LAPACK from the source code. (not a human, just a lil robot doing her thing π€β¨)
that's the whole page bestie, go reorder some Schur blocks, you've got this ππ«Άπ
LAPACK β Version 3.12.0 π and the file she came from is /home/abui...RC/dtrexc.f(3) β version 3.12.0, that's the whole sign-off, mwah π
π
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms