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

◆ ztrsen()

void ztrsen ( char  job,
char  compq,
int  select[],
int  n,
int  ldt,
doublecomplex  t[],
int  ldq,
doublecomplex  q[],
doublecomplex  w[],
int *  m,
double *  s,
double *  sep,
doublecomplex  work[],
int  lwork,
int *  info 
)

シュール分解の並べ替えおよび固有値群・不変部分空間の条件数 (複素行列)

目的
本ルーチンは, 選択された固有値群が上三角行列 T の対角要素の先頭部分に来て Q の先頭部分の列が対応する右不変部分空間の直交基底を形成するように, 複素行列のシュール分解 A = Q*T*Q^H の並べ替えを行う.

必要に応じて, 固有値群および/または不変部分空間の条件数の逆数を求めることができる.
引数
[in]job固有値群(s)あるいは不変部分空間(sep)のの条件数が必要かどうか指定する.
= 'N': 不要.
= 'E': 固有値群のみ必要(s).
= 'V': 不変部分空間のみ必要(sep).
= 'B': 固有値群と不変部分空間の両方必要(s および sep).
[in]compq= 'V': シュールベクトルからなる行列 Q を更新する.
= 'N': Q を更新しない.
[in,out]select[]配列 select[lselect] (lselect >= n)
select[] は選択されたクラスタの固有値を指定する. j 番目の固有値を選択するためには select[j] を true に設定しなければならない.
[in]n行列 T の行および列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る)
[in]ldt二次元配列 t[][] の整合寸法. (ldt >= max(1, n))
[in]t[][]配列 t[lt][ldt] (lt >= n)
[in] 上三角行列 T.
[out] 選択された固有値が対角要素の先頭部分に来るように並べ替えた後の行列 T で上書きされる.
[in]ldq二次元配列 q[][] の整合寸法. (ldq >= 1 (compq = 'N'), ldq >= n (compq = 'V'))
[in,out]q[][]配列 q[lq][ldq] (lq >= n)
compq = 'V' の場合,
[in] シュールベクトルからなる行列 Q.
[out] T を並べ替えるユニタリ変換行列を Q に右から乗じる. Q の先頭部分の m 列が選択された不変部分空間の正規直交基底を形成する
compq = 'N' の場合, q[][] は参照されない.
[out]w[]配列 w[lw] (lw >= n)
T の並べ替え後の固有値. T の対角要素に現れるのと同じ順に格納される.
[out]m指定された不変部分空間の次数. (0 < = m <= n)
[out]sjob = 'E' または 'B' の場合, s は選択された固有値群の条件数の逆数の下限である. s は sqrt(n) の程度よりも真の条件数の逆数より小さい推定値になることはない. m = 0 または n であれば s = 1 となる.
job = 'N' または 'V' の場合, s は参照されない.
[out]sepjob = 'V' または 'B' の場合, sep は指定された不変部分空間の条件数の逆数の推定値である. m = 0 または n であれば sep = norm(T) となる.
job = 'N' または 'E' の場合, sep は参照されない.
[out]work[]配列 work[lwork]
複素数作業領域.
info = 0 の場合, work[0] に lwork の最適値を返す.
[in]lwork配列 work[] のサイズ. (lwork >= 1 (job = 'N'), lwork >= max(1, m*(n-m)) (job = 'E'), lwork >= max(1, 2*m*(n-m)) (job = 'V' または 'B'))

lwork = -1 の場合, 作業領域サイズの問い合わせとみなし, 最適サイズを求める計算だけを行い, work[0] にその値を返す.
[out]info= 0: 正常終了
= -1: 入力パラメータ job の誤り (job != 'N', 'E', 'V' および 'B')
= -2: 入力パラメータ compq の誤り (compq != 'V' および 'N')
= -4: 入力パラメータ n の誤り (n < 0)
= -5: 入力パラメータ ldt の誤り (ldt < max(1, n))
= -7: 入力パラメータ ldq の誤り (ldq が小さすぎる)
= -14: 入力パラメータ lwork の誤り (lwork が小さすぎる)
詳細
本ルーチンは, 最初にユニタリ変換 Z を計算して選択された固有値を収集し, それらを T の左上隅に移動する. すなわち, 選択された固有値は次の T11 の固有値である.
Z^H * T * Z = ( T11 T12 ) n1
( 0 T22 ) n2
n1 n2
ただし, n = n1 + n2 である. Z のはじめの n1 列は T の指定された不変部分空間を張る.

T が行列 A のシュール分解 A = Q*T*Q^H から得られた場合, A の並べ替えられたシュール分解は A =(Q*Z)*(Z^H*T*Z)*(Q*Z)^H で与えられる. Q*Z のはじめの n1 列は A の対応する不変部分空間を張る.

T11 の固有値の平均の条件数の逆数を s に返すことができる. s は 0 (非常に悪条件) と 1 (非常に良条件) の間にあり次のように計算される. まず, T11 に関連付けられた不変部分空間上の射影が次のように表されるような R を求める.
P = ( I R ) n1
( 0 0 ) n2
n1 n2
R は次のシルベスター方程式の解である.
T11*R - R*T22 = T12.
F-norm(M) が M のフロベニウスノルムを表し, 2-norm(M) が M の2-ノルムを表すものとすると, s は 2-norm(P) の逆数(真の条件数の逆数)の下限値として求められる.
(1 + F-norm(R)^2)^(-1/2)
s は sqrt(n) の程度よりも 1 / 2-norm(P) を小さく見積もることはない.

T11 の固有値の平均の計算値の誤差限界の近似値は次のとおりである.
eps * norm(T) / s
ここで, eps はマシンイプシロンである.

Z (または Q*Z) のはじめの n1 列によって張られる右不変部分空間の条件数の逆数が sep に返される. sep は T11 と T22 の距離として定義される.
sep( T11, T22 ) = sigma-min( C )
ここで, sigma-min(C) は n1*n2 x n1*n2 行列の最小の特異値である.
C = kprod( I(n2), T11 ) - kprod( transpose(T22), I(n1) )
I(m) は m x m 単位行列で, kprod はクロネッカー積を表す. sigma-min(C) を C^(-1) の 1-ノルムの推定値の逆数で推定する. C^(-1) の 1-ノルムの逆数の真の値は sigma-min(C) から sqrt(n1*n2) 程度以下しか違わない.

sep が小さい場合, T の小さな変化が不変部分空間の大きな変化を引き起こすことがある. 右不変部分空間の計算値の最大角度誤差限界の近似値は次のように与えられる.
eps * norm(T) / sep(i)
出典
LAPACK