|
|
◆ Dtrexc()
| Sub Dtrexc |
( |
Compq As |
String, |
|
|
N As |
Long, |
|
|
T() As |
Double, |
|
|
Q() As |
Double, |
|
|
Ifst As |
Long, |
|
|
Ilst As |
Long, |
|
|
Info As |
Long |
|
) |
| |
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,out] | T() | Array T(LT1 - 1, LT2 - 1) (LT1 >= N, LT2 >= 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,out] | Q() | Array Q(LQ1 - 1, LQ2 - 1) (LQ1 >= N, LQ2 >= 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] | 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 T() is invalid.
= -4: The argument Q() is invalid.
= -5: The argument Ifst had an illegal value. (Ifst < 1 or Ifst > N)
= -6: 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
|