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

◆ zhsein()

void zhsein ( char  side,
char  eigsrc,
char  initv,
int  select[],
int  n,
int  ldh,
doublecomplex  h[],
doublecomplex  w[],
int  ldvl,
doublecomplex  vl[],
int  ldvr,
doublecomplex  vr[],
int  mm,
int *  m,
doublecomplex  work[],
double  rwork[],
int  ifaill[],
int  ifailr[],
int *  info 
)

ヘッセンベルグ行列の固有ベクトル (逆反復法) (複素行列)

目的
本ルーチンは逆反復法を使用して上ヘッセンベルグ複素行列 H の右および/または左固有ベクトルを求める.

行列 H の固有値 w に対応する右固有ベクトル x および左固有ベクトル y は次のように定義される.
H * x = w * x, y^H * H = w * y^H
ただし, y^H はベクトル y の共役転置を表す.
引数
[in]side= 'R': 右固有ベクトルのみ求める.
= 'L': 左固有ベクトルのみ求める.
= 'B': 右および左固有ベクトルの両方を求める.
[in]eigsrcw[] に入力された固有値の求め方を指定する.
= 'Q': zhseqr を使用して固有値を求めた. H の副対角要素に 0 のものがある, すなわち, ブロック三角行列であれば j 番目の固有値は j 番目の行/列を含むブロックの固有値であるとみなすことができる. これにより一つの対角ブロックにだけ逆反復法を適用すればよくなる.
= 'N': 固有値と対角ブロックの間に対応関係を仮定しない. この場合, 常に行列 H 全体を用いて逆反復法を行わなければならない.
[in]initv= 'N': 初期ベクトルは入力されない.
= 'U': 配列 vl[][] および/または vr[][] にユーザーにより初期ベクトルが入力される.
[in]select[]配列 select[lselect][ldselect] (lselect >= n)
求める固有ベクトルを指定する. 固有値 w[j] に対応する固有ベクトルを選択するためには select[j] を true に設定しなければならない.
[in]n行列 H の行および列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る)
[in]ldh二次元配列 h[][] の整合寸法. (ldh >= max(1, n))
[in]h[][]配列 h[lh][ldh] (lh >= n)
上ヘッセンベルグ行列 H.
H の中で NaN が検出された場合, info = -7 を返す.
[in]w[]配列 w[lw] (lw >= n)
[in] H の固有値.
[out] 独立な固有ベクトルを探すときに近接固有値には小さな摂動を加えるため, w[] の実数部が変更されることがある.
[in]ldvl二次元配列 vl[][] の整合寸法. (ldvl >= 1 (side = 'R'), ldvl >= max(1, n) (side = 'L' または 'B'))
[in,out]vl[][]配列 vl[lvl][ldvl] (lvl >= mm)
[in] initv = 'U' かつ side = 'L' または 'B' の場合, vl[][] に左固有ベクトルの逆反復のための初期ベクトルを入れておかなければならない. 各固有ベクトルのための初期ベクトルは, それぞれの固有ベクトルが格納されるのと同じ行に入れておかなければならない.
[out] side = 'L' または 'B' の場合, select[] により指定された左固有ベクトルが vl[][] の連続する行に対応する固有値と同じ順に格納される.
side = 'R' の場合, vl[][] は参照されない.
[in]ldvr二次元配列 vr[][] の整合寸法. (ldvr >= 1 (side = 'L'), ldvr >= max(1, n) (side = 'R' または 'B'))
[in,out]vr[][]配列 vr[lvr][ldvr] (lvr >= mm)
[in] initv = 'U' かつ side = 'R' または 'B' の場合, vr[][] に右固有ベクトルの逆反復のための初期ベクトルを入れておかなければならない. 各固有ベクトルのための初期ベクトルは, それぞれの固有ベクトルが格納されるのと同じ行に入れておかなければならない.
[out] side = 'R' または 'B' の場合, select[] により指定された右固有ベクトルが vr[][] の連続する行に対応する固有値と同じ順に格納される.
side = 'L' の場合, vr[][] は参照されない.
[in]mm配列 vl[][] および/または vr[][] の中の要素数. (mm >= m)
[out]m固有ベクトルを格納するのに必要な配列 vl[][] および/または vr[][] の中の行数 (= select[] 中の true の数).
[out]work[]配列 work[lwork] (lwork >= n*n)
複素数作業領域.
[out]rwork[]配列 rwork[lrwork] (lrwork >= n)
作業領域.
[out]ifaill[]配列 ifaill[lifaill] (lifaill >= mm)
side = 'L' または 'B' の場合, vl[][] の第 i 行の左固有ベクトル(固有値 w[j] に対応)が収束しなかったならば ifaill[i] = j > 0 に設定される. 固有ベクトルが正常に収束したならば ifaill[i] = 0 に設定される.
side = 'R' の場合, ifaill[][] は参照されない.
[out]ifailr[]配列 ifailr[lifailr] (lifailr >= mm)
side = 'R' または 'B' の場合, vr[][] の第 i 行の右固有ベクトル(固有値 w[j] に対応)が収束しなかったならば ifailr[i] = j > 0 に設定される. 固有ベクトルが正常に収束したならば ifailr[i] = 0 に設定される.
side = 'L' の場合, ifailr[][] は参照されない.
[out]info= 0: 正常終了
= -1: 入力パラメータ side の誤り (side != 'R', 'L' および 'B')
= -2: 入力パラメータ eigsrc の誤り (eigsrc != 'Q' および 'N')
= -3: 入力パラメータ initv の誤り (initv != 'N' および 'U')
= -5: 入力パラメータ n の誤り (n < 0)
= -6: 入力パラメータ ldh の誤り (ldh < max(1, n))
= -7: 入力パラメータ h の誤り (h の中で NaN が検出された)
= -9: 入力パラメータ ldvl の誤り (ldvl が小さすぎる)
= -11: 入力パラメータ ldvr の誤り (ldvr が小さすぎる)
= -13: 入力パラメータ mm の誤り (mm < m)
= i > 0: i 個の固有ベクトルが収束しなかった. 詳細は ifaill[] および ifailr[] を参照せよ.
出典
LAPACK