Contents

# ?tgexc

Reorders the generalized Schur decomposition of a pair of matrices (A,B) so that one diagonal block of (A,B) moves to another row index.

## Syntax

Include Files
• mkl.h
Description
The routine reorders the generalized real-Schur/Schur decomposition of a real/complex matrix pair (
A
,
B
) using an orthogonal/unitary equivalence transformation
(
A
,
B
) =
Q
*(
A
,
B
)*
Z
H
,
so that the diagonal block of (
A
,
B
) with row index
ifst
is moved to row
ilst
. Matrix pair (
A
,
B
) must be in a generalized real-Schur/Schur canonical form (as returned by gges), that is,
A
is block upper triangular with 1-by-1 and 2-by-2 diagonal blocks and
B
is upper triangular. Optionally, the matrices
Q
and
Z
of generalized Schur vectors are updated.
Q
in
*
A
in
*
Z
in
T
=
Q
out
*
A
out
*
Z
out
T
Q
in
*
B
in
*
Z
in
T
=
Q
out
*
B
out
*
Z
out
T
.
Input Parameters
matrix_layout
Specifies whether matrix storage layout is row major (
LAPACK_ROW_MAJOR
) or column major (
LAPACK_COL_MAJOR
).
wantq
,
wantz
If
wantq
=
1
, update the left transformation matrix
Q
;
If
wantq
=
0
, do not update
Q
;
If
wantz
=
1
, update the right transformation matrix
Z
;
If
wantz
=
0
, do not update
Z
.
n
The order of the matrices
A
and
B
(
n
0).
a
,
b
,
q
,
z
Arrays:
a
(size max(1,
lda
*
n
))
contains the matrix
A
.
b
(size max(1,
ldb
*
n
))
contains the matrix
B
.
q
(size at least 1 if
wantq
= 0 and at least max(1,
ldq
*
n
) if
wantq
= 1)
If
wantq
=
0
, then
q
is not referenced.
If
wantq
=
1
, then
q
must contain the orthogonal/unitary matrix
Q
.
z
(size at least 1 if
wantz
= 0 and at least max(1,
ldz
*
n
) if
wantz
= 1)
If
wantz
=
0
, then
z
is not referenced.
If
wantz
=
1
, then
z
must contain the orthogonal/unitary matrix
Z
.
lda
The leading dimension of
a
; at least max(1,
n
).
ldb
The leading dimension of
b
; at least max(1,
n
).
ldq
The leading dimension of
q
;
If
wantq
=
0
, then
ldq
1.
If
wantq
=
1
, then
ldq
max(1,
n
).
ldz
The leading dimension of
z
;
If
wantz
=
0
, then
ldz
1.
If
wantz
=
1
, then
ldz
max(1,
n
).
ifst
,
ilst
Specify the reordering of the diagonal blocks of (
A
,
B
). The block with row index
ifst
is moved to row
ilst
, by a sequence of swapping between adjacent blocks. Constraint:
1
ifst
,
ilst
n
.
Output Parameters
a
,
b
,
q
,
z
Overwritten by the updated matrices
A
,
B
,
Q
, and
Z
respectively.
ifst
,
ilst
Overwritten for real flavors only.
If
ifst
pointed to the second row of a 2 by 2 block on entry, 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).
Return Values
This function returns a value
info
.
If
info
=0
, the execution is successful.
If
info
=
-i
, the
i
-th parameter had an illegal value.
If
info
= 1
, the transformed matrix pair (
A
,
B
) would be too far from generalized Schur form; the problem is ill-conditioned. (
A
,
B
) may have been partially reordered, and
ilst
points to the first row of the current position of the block being moved.

#### Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804