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

◆ 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