|
|
◆ dtrexc()
| void dtrexc |
( |
char |
compq, |
|
|
int |
n, |
|
|
int |
ldt, |
|
|
double |
t[], |
|
|
int |
ldq, |
|
|
double |
q[], |
|
|
int * |
ifst, |
|
|
int * |
ilst, |
|
|
double |
work[], |
|
|
int * |
info |
|
) |
| |
Reordering of real Schur factorization of real matrix
- Purpose
- This routine 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.
T must be in Schur canonical form (as returned by dhseqr), that is, block upper triangular with 1 x 1 and 2 x 2 diagonal blocks; each 2 x 2 diagonal block has its diagonal elements equal and its off-diagonal elements of opposite sign.
- Parameters
-
| [in] | compq | = 'V': Update the matrix Q of Schur vectors.
= 'N': Do not update Q. |
| [in] | n | Order of the matrix T. (n >= 0) (If n = 0, returns without computation) |
| [in] | ldt | Leading dimension of the two dimensional array t[][]. (ldt >= max(1, n)) |
| [in,out] | t[][] | Array t[lt][ldt] (lt >= n)
[in] The upper quasi-triangular matrix T, in Schur canonical form.
[out] The reordered upper quasi-triangular matrix, again in Schur canonical form. |
| [in] | ldq | Leading dimension of the two dimensional array q[][]. (ldq >= 1 if compq = 'N', ldq >= max(1, n) if compq = 'V') |
| [in,out] | q[][] | Array q[lq][ldq] (lq >= n)
If compq = 'V',
[in] The matrix Q of Schur vectors.
[out] Q has been postmultiplied by the orthogonal transformation matrix Z which reorders T.
If compq = 'N', q[][] is not referenced. |
| [in,out] | ifst | |
| [in,out] | ilst | [in] 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.
[out] If ifst pointed on entry to the second row of a 2 x 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) |
| [out] | work[] | Array work[lwork] (lwork >= n)
Work array. |
| [out] | info | = 0: Successful exit
= -1: The argument compq had an illegal value (copq != 'V' nor 'N')
= -2: The argument n had an illegal value (n < 0)
= -3: The argument ldt had an illegal value (ldt < max(1, n))
= -5: The argument ldq had an illegal value (ldq too small)
= -7: The argument ifst had an illegal value (ifst < 1 or ifst > n)
= -8: The argument ilst had an illegal value (ilst < 1 or ilst > n)
= 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. |
- Reference
- LAPACK
|