|
|
◆ dtrexc()
| void dtrexc |
( |
char |
compq, |
|
|
int |
n, |
|
|
int |
ldt, |
|
|
double |
t[], |
|
|
int |
ldq, |
|
|
double |
q[], |
|
|
int * |
ifst, |
|
|
int * |
ilst, |
|
|
double |
work[], |
|
|
int * |
info |
|
) |
| |
シュール分解の並べ替え
- 目的
- 本ルーチンは, T の行インデックス ifst の対角ブロックを行 ilst に移動するように, 実行列の実シュール分解 A = Q*T*Q^T の並べ替えを行う.
実シュール形 T は直交相似変換 Z^T*T*Z により並べ替えられる. また, シュールベクトルからなる行列 Q は Z を右から乗算することにより更新することができる.
T は(dhseqr が返すように)シュール正準形でなければならない. すなわち, 1 x 1 および 2 x 2 対角ブロックを持つブロック上三角行列である. 2 x 2 対角ブロックそれぞれにおいて, 対角要素は同符号, 副対角要素は反対符号である.
- 引数
-
| [in] | compq | = 'V': シュールベクトルからなる行列 Q を更新する.
= 'N': Q を更新しない. |
| [in] | n | 行列 T の行および列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る) |
| [in] | ldt | 二次元配列 t[][] の整合寸法. (ldt >= max(1, n)) |
| [in,out] | t[][] | 配列 t[lt][ldt] (lt >= n)
[in] シュール正準形の上準三角行列 T.
[out] 並べ替え後の上準三角行列. やはりシュール正準形である. |
| [in] | ldq | 二次元配列 q[][] の整合寸法. (ldq >= 1 (compq = 'N'), ldq >= max(1, n) (compq = 'V')) |
| [in,out] | q[][] | 配列 q[lq][ldq] (lq >= n)
compq = 'V' の場合,
[in] シュールベクトルからなる行列 Q.
[out] T を並べ替える直交変換行列 Z を Q に右から乗じる.
compq = 'N' の場合, q[][] は参照されない. |
| [in,out] | ifst | |
| [in,out] | ilst | [in] T の対角ブロックの並べ替えを指定する. 行インデックスが ifst のブロックは, 隣り合うブロックの転置を繰り返すことにより, 行 ilst に移動される.
[out] ifst が 2 x 2 ブロックの 2 行目を指していれば, 1 行目を指すように変更される. ilst は常に最終位置にあるブロックの 1 行目を指す(入力値に対して +1 か -1 異なることがある).
(1 <= ifst <= n, 1 <= ilst <= n) |
| [out] | work[] | 配列 work[lwork] (lwork >= n)
作業領域. |
| [out] | info | = 0: 正常終了
= -1: 入力パラメータ compq の誤り (compq != 'V' および 'N')
= -2: 入力パラメータ n の誤り (n < 0)
= -3: 入力パラメータ ldt の誤り (ldt < max(1, n))
= -5: 入力パラメータ ldq の誤り (ldq が小さすぎる)
= -7: 入力パラメータ ifst の誤り (ifst < 1 または ifst > n)
= -8: 入力パラメータ ilst の誤り (ilst < 1 または ilst > n)
= 1: 2 つの隣り合うブロックが近すぎて交換できなかった(問題が非常に悪条件). t[][] は部分的に並べ替えが行われ, ilst は移動されるブロックの現在の位置の 1 行目を指す. |
- 出典
- LAPACK
|