|
|
◆ Dtrexc()
| Sub Dtrexc |
( |
Compq As |
String, |
|
|
N As |
Long, |
|
|
T() As |
Double, |
|
|
Q() As |
Double, |
|
|
Ifst As |
Long, |
|
|
Ilst As |
Long, |
|
|
Info As |
Long |
|
) |
| |
シュール分解の並べ替え
- 目的
- 本ルーチンは, 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,out] | T() | 配列 T(LT1 - 1, LT2 - 1) (LT1 >= N, LT2 >= N)
[in] シュール正準形の上準三角行列 T.
[out] 並べ替え後の上準三角行列. やはりシュール正準形である. |
| [in,out] | Q() | 配列 Q(LQ1 - 1, LQ2 - 1) (LQ1 >= N, LQ2 >= 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] | Info | = 0: 正常終了.
= -1: パラメータ Compq の誤り. (Compq <> "V" および "N")
= -2: パラメータ N の誤り. (N < 0)
= -3: パラメータ T() の誤り.
= -4: パラメータ Q() の誤り.
= -7: パラメータ Ifst の誤り. (Ifst < 1 または Ifst > N)
= -8: パラメータ Ilst の誤り. (Ilst < 1 または Ilst > N)
= 1: 2 つの隣り合うブロックが近すぎて交換できなかった(問題が非常に悪条件). T() は部分的に並べ替えが行われ, Ilst は移動されるブロックの現在の位置の 1 行目を指す. |
- 出典
- LAPACK
|