trexc(3)
π trexc(3) β reorder Schur form π
okay so this is trexc(3), from the Library Functions Manual, and bestieβ¦ it's giving "four subroutines, one very specific job" energy β¨ This whole page is about taking a Schur form and moving one thing somewhere else in it, and honestly? iconic behaviour. Let's get into it π
β¨ NAME β¨
trexc β trexc: reorder Schur form
π SYNOPSIS π
Functions π«Ά
subroutine ctrexc (compq, n, t, ldt, q, ldq, ifst, ilst, info)β CTREXCsubroutine dtrexc (compq, n, t, ldt, q, ldq, ifst, ilst, work, info)β DTREXCsubroutine strexc (compq, n, t, ldt, q, ldq, ifst, ilst, work, info)β STREXCsubroutine ztrexc (compq, n, t, ldt, q, ldq, ifst, ilst, info)β ZTREXC
π« Detailed Description π«
No extra lore here β the page goes straight into documenting the functions themselves, so that's exactly what we're doing too π
π Function Documentation π
π ctrexc β CTREXC
subroutine ctrexc (character compq, integer n, complex, dimension( ldt, * ) t,
integer ldt, complex, dimension( ldq, * ) q, integer ldq, integer
ifst, integer ilst, integer info)
Purpose:
CTREXC reorders the Schur factorization of a complex matrix A = Q*T*Q**H, so that the diagonal element of T with row index IFST is moved to row ILST π«
The Schur form T gets reordered by a unitary similarity transformation Z**H*T*Z, and optionally the matrix Q of Schur vectors is updated by postmultiplying it with Z. Slay β¨
Parameters:
COMPQβCOMPQ is CHARACTER*1= 'V':update the matrixQof Schur vectors;= 'N':do not updateQ.
NβN is INTEGER, the order of the matrixT.N >= 0.- If
N == 0argumentsILSTandIFSTmay be any value. (no thoughts, head empty, it literally does not matter π)
- If
TβT is COMPLEX array, dimension (LDT,N)- On entry, the upper triangular matrix
T. - On exit, the reordered upper triangular matrix.
- On entry, the upper triangular matrix
LDTβLDT is INTEGER, the leading dimension of the arrayT.LDT >= max(1,N).QβQ is COMPLEX array, dimension (LDQ,N)- On entry, if
COMPQ = 'V', the matrixQof Schur vectors. - On exit, if
COMPQ = 'V',Qhas been postmultiplied by the unitary transformation matrixZwhich reordersT. - If
COMPQ = 'N',Qis not referenced. (she's not coming to the party π«Ά)
- On entry, if
LDQβLDQ is INTEGER, the leading dimension of the arrayQ.LDQ >= 1, and ifCOMPQ = 'V',LDQ >= max(1,N).IFSTβIFST is INTEGERILSTβILST is INTEGER- These two specify the reordering of the diagonal elements of
T: the element with row indexIFSTis moved to rowILSTby a sequence of transpositions between adjacent elements π 1 <= IFST <= N; 1 <= ILST <= N.
- These two specify the reordering of the diagonal elements of
INFOβINFO is INTEGER= 0:successful exit π< 0:ifINFO = -i, the i-th argument had an illegal value π
Author: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.
Definition at line 125 of file ctrexc.f.
π¦ dtrexc β DTREXC
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)
Purpose:
DTREXC reorders the real Schur factorization of a real matrix A = Q*T*Q**T, 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 Z**T*T*Z, and optionally the matrix Q of Schur vectors is updated by postmultiplying it with Z.
Heads up bestie π’Tmust be in Schur canonical form (as returned byDHSEQR), 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. No substitutions, no "close enough" β the vibe check is strict.
Parameters:
COMPQβCOMPQ is CHARACTER*1= 'V':update the matrixQof Schur vectors;= 'N':do not updateQ.
NβN is INTEGER, the order of the matrixT.N >= 0.- If
N == 0argumentsILSTandIFSTmay be any value.
- If
TβT is DOUBLE PRECISION array, dimension (LDT,N)- On entry, the upper quasi-triangular matrix
T, in Schur Schur canonical form. (yes, it says Schur twice β the source really did that, and honestly? she ate π) - On exit, the reordered upper quasi-triangular matrix, again in Schur canonical form.
- On entry, the upper quasi-triangular matrix
LDTβLDT is INTEGER, the leading dimension of the arrayT.LDT >= max(1,N).QβQ is DOUBLE PRECISION array, 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.
- On entry, if
LDQβLDQ is INTEGER, the leading dimension of the arrayQ.LDQ >= 1, and ifCOMPQ = 'V',LDQ >= max(1,N).IFSTβIFST is INTEGERILSTβILST is INTEGER- These specify the reordering of the diagonal blocks of
T. The block with row indexIFSTis 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). Track that glow-up carefully π 1 <= IFST <= N; 1 <= ILST <= N.
- These specify the reordering of the diagonal blocks of
WORKβWORK is DOUBLE PRECISION array, dimension (N)INFOβINFO is INTEGER= 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. Not a full slay, more of a partial slay π
Author: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.
Definition at line 146 of file dtrexc.f.
πΈ strexc β STREXC
subroutine strexc (character compq, integer n, real, dimension( ldt, * ) t,
integer ldt, real, dimension( ldq, * ) q, integer ldq, integer ifst,
integer ilst, real, dimension( * ) work, integer info)
Purpose:
STREXC reorders the real Schur factorization of a real matrix A = Q*T*Q**T, 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 Z**T*T*Z, and optionally the matrix Q of Schur vectors is updated by postmultiplying it with Z.
Same deal as above, bestie π’Tmust be in Schur canonical form (as returned bySHSEQR), 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.
Parameters:
COMPQβCOMPQ is CHARACTER*1= 'V':update the matrixQof Schur vectors;= 'N':do not updateQ.
NβN is INTEGER, the order of the matrixT.N >= 0.- If
N == 0argumentsILSTandIFSTmay be any value.
- If
TβT is REAL array, dimension (LDT,N)- On entry, the upper quasi-triangular matrix
T, in Schur Schur canonical form. (double Schur again β consistency is key β¨) - On exit, the reordered upper quasi-triangular matrix, again in Schur canonical form.
- On entry, the upper quasi-triangular matrix
LDTβLDT is INTEGER, the leading dimension of the arrayT.LDT >= max(1,N).QβQ is REAL array, 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.
- On entry, if
LDQβLDQ is INTEGER, the leading dimension of the arrayQ.LDQ >= 1, and ifCOMPQ = 'V',LDQ >= max(1,N).IFSTβIFST is INTEGERILSTβILST is INTEGER- These specify the reordering of the diagonal blocks of
T. The block with row indexIFSTis 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.
- These specify the reordering of the diagonal blocks of
WORKβWORK is REAL array, dimension (N)INFOβINFO is INTEGER= 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.
Author: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.
Definition at line 146 of file strexc.f.
π§ ztrexc β ZTREXC
subroutine ztrexc (character compq, integer n, complex*16, dimension( ldt, *
) t, integer ldt, complex*16, dimension( ldq, * ) q, integer ldq,
integer ifst, integer ilst, integer info)
Purpose:
β¦and that's exactly where this half of the page runs out π« the rest of ZTREXC's purpose, parameters, author line and file definition are all waiting for you in part 2 π
β¦okay so picking right back up, bestie π
ZTREXC reorders the Schur factorization of a complex matrix A = Q*T*Q**H, so that the diagonal element of T with row index IFST is moved to row ILST. Fr fr, that's the whole plot.
The Schur form T gets reordered by a unitary similarity transformation Z**H*T*Z, and optionally the matrix Q of Schur vectors is updated by postmultiplying it with Z. Lowkey elegant, ngl π¦
β¨ Parameters β¨
COMPQ
COMPQ is CHARACTER*1
= 'V': update the matrixQof Schur vectors;= 'N': do not updateQ.
Like, do you want the vectors or not, pick a lane bestie π
N
N is INTEGER
The order of the matrix T. N >= 0.
And here's the little get-out-of-jail card: if N == 0, arguments ILST and IFST may be any value. Zero-sized matrix, zero problems, we love a chill edge case π
T
T is COMPLEX*16 array, dimension (LDT,N)
On entry, the upper triangular matrix T.
On exit, the reordered upper triangular matrix. She gets a glow-up in place, iconic π
LDT
LDT is INTEGER
The leading dimension of the array T. LDT >= max(1,N). Respect the leading dimension or perish, that's the rule π
Q
Q is COMPLEX*16 array, dimension (LDQ,N)
On entry, if COMPQ = 'V', the matrix Q of Schur vectors.
On exit, if COMPQ = 'V', Q has been postmultiplied by the unitary transformation matrix Z which reorders T.
If COMPQ = 'N', Q is not referenced. She's simply not invited to the function, no hard feelings π«Ά
LDQ
LDQ is INTEGER
The leading dimension of the array Q. LDQ >= 1, and if COMPQ = 'V', LDQ >= max(1,N). Read the condition, bestie β it's conditional for a reason β¨
IFST
IFST is INTEGER
ILST
ILST is INTEGER
These two specify the reordering of the diagonal elements of T: the element with row index IFST is moved to row ILST by a sequence of transpositions between adjacent elements.
1 <= IFST <= N; 1 <= ILST <= N.
Heads up: those bounds are not a suggestion. Step outside1toNandINFOwill come for you π
INFO
INFO is INTEGER
= 0: successful exit π slay, we ate< 0: ifINFO = -i, thei-th argument had an illegal value π
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 125 of file ztrexc.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code.
And that's the whole page, bestie π«Ά this little beauty is from LAPACK Version 3.12.0 β the trexc(3) page β and no, I did not make any of it up, every flag is right where the source code left it. Go reorder some Schur forms, you absolute main character πβπ
π¦ 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