DTREXC(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

πŸ¦‹ 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 β€” COMPQ is CHARACTER*1
    • = 'V': update the matrix Q of Schur vectors;
    • = 'N': do not update Q.
  • N β€” N is INTEGER
    • The order of the matrix T. N >= 0.
    • If N == 0 arguments ILST and IFST may be any value. (yes, any value. feral behavior but slay πŸ’€)
  • T β€” T is DOUBLE PRECISION array, 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.
  • LDT β€” LDT is INTEGER
    • The leading dimension of the array T. LDT >= max(1,N).
  • Q β€” Q is DOUBLE PRECISION 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 orthogonal transformation matrix Z which reorders T.
    • If COMPQ = 'N', Q is not referenced. (she's not even invited to the function πŸ’…)
  • LDQ β€” LDQ is INTEGER
    • The leading dimension of the array Q. LDQ >= 1, and if COMPQ = 'V', LDQ >= max(1,N).
  • IFST β€” IFST is INTEGER
  • ILST β€” ILST is INTEGER
    • Specify the reordering of the diagonal blocks of T.
    • The block with row index IFST is moved to row ILST, by a sequence of transpositions between adjacent blocks.
    • On exit, if IFST pointed on entry to the second row of a 2-by-2 block, it is changed to point to the first row; ILST always points to the first row of the block in its final position (which may differ from its input value by +1 or -1).
    • 1 <= IFST <= N; 1 <= ILST <= N.
  • WORK β€” WORK is DOUBLE PRECISION array, dimension (N)
  • INFO β€” INFO is INTEGER
    • = 0: successful exit ✨
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • = 1: two adjacent blocks were too close to swap (the problem is very ill-conditioned); T may have been partially reordered, and ILST points 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 = 1 is not a "you did something wrong" error, it's a "these two blocks were too close to swap" situation. T might be partially reordered and ILST points 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