XLPack 7.0
XLPack 数値計算ライブラリ (Excel VBA) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ 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