|
|
◆ dhsein()
| void dhsein |
( |
char |
side, |
|
|
char |
eigsrc, |
|
|
char |
initv, |
|
|
int |
select[], |
|
|
int |
n, |
|
|
int |
ldh, |
|
|
double |
h[], |
|
|
double |
wr[], |
|
|
double |
wi[], |
|
|
int |
ldvl, |
|
|
double |
vl[], |
|
|
int |
ldvr, |
|
|
double |
vr[], |
|
|
int |
mm, |
|
|
int * |
m, |
|
|
double |
work[], |
|
|
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] | eigsrc | (wr[], wi[]) に入力された固有値の求め方を指定する.
= 'Q': 固有値が dhseqr を使用して求められたとすると, H の副対角要素に 0 のものがある, すなわち, ブロック三角行列であれば, j 番目の固有値は j 番目の行/列を含むブロックの固有値であるとみなすことができる. これにより一つの対角ブロックにだけ逆反復法を適用すればよい.
= 'N': 固有値と対角ブロックの間に対応関係を仮定しない. この場合, 常に行列 H 全体を用いて逆反復法を行わなければならない. |
| [in] | initv | = 'N': 初期ベクトルは入力されない.
= 'U': 配列 vl[][] および/または vr[][] にユーザーにより初期ベクトルが入力される. |
| [in,out] | select[] | 配列 select[lselect] (lselect >= n)
[in] 求める固有ベクトルを指定する. 実数固有値 w[j] に対応する固有ベクトルを選択するためには select[j] を true に設定しなければならない. 共役複素対の固有値 (wr[j], wi[j]) および (wr[j+1], wi[j+1]) に対応する固有ベクトルを選択するためには select[j] または select[j+1] のどちらかまたは両方を true に設定しなければならない.
[out] 共役複素対の固有値に対応する固有ベクトルを選択した場合, select[j] は true に, select[j+1] は false に設定される. |
| [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,out] | wr[] | 配列 wr[lwr] (lwr >= n) |
| [in] | wi[] | 配列 wi[lwi] (lwi >= n)
[in] H の固有値の実数部および虚数部. 複素共役対をなす固有値は, wr[] と wi[] の連続した要素に格納されなければならない.
[out] 独立な固有ベクトルを探すときに近接固有値には小さな摂動を加えるため, wr[] が変更されることがある. |
| [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[][] の連続する行に対応する固有値と同じ順に格納される. 複素固有値に対応する複素固有ベクトルは連続する2行に格納される(1行目には実数部, 2行目には虚数部が入る).
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[][] の連続する行に対応する固有値と同じ順に格納される. 複素固有値に対応する複素固有ベクトルは連続する2行に格納される(1行目には実数部, 2行目には虚数部が入る).
side = 'L' の場合, vr[][] は参照されない. |
| [in] | mm | 配列 vl[][] および/または vr[][] の中の列数. (mm >= m) |
| [out] | m | 固有ベクトルを格納するのに必要な配列 vl[][] および/または vr[][] の中の行数. 選択された実固有ベクトルそれぞれには 1 行, また, 選択された複素固有ベクトルそれぞれには 2 行が必要である. |
| [out] | work[] | 配列 work[lwork] (lwork >= n*(n + 2))
作業領域. |
| [out] | ifaill[] | 配列 ifaill[lifaill] (lifaill >= mm)
side = 'L' または 'B' の場合, vl[][] の第 i 行の左固有ベクトル(固有値 w[j] に対応)が収束しなかったならば ifaill[i] = j > 0 に設定される. 固有ベクトルが正常に収束したならば ifaill[i] = 0 に設定される. vl[][] の第 i および i+1 行に複素固有ベクトルが入っていれば ifaill[i] と ifaill[i+1] は同じ値に設定される.
side = 'R' の場合, ifaill[] は参照されない. |
| [out] | ifailr[] | 配列 ifailr[lifailr] (lifailr >= mm)
side = 'R' または 'B' の場合, vr[][] の第 i 行の右固有ベクトル(固有値 w[j] に対応)が収束しなかったならば ifailr[i] = j > 0 に設定される. 固有ベクトルが正常に収束したならば ifailr[i] = 0 に設定される. vr[][] の第 i および i+1 行に複素固有ベクトルが入っていれば ifailr[i] と ifailr[i+1] は同じ値に設定される.
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 が検出された)
= -10: 入力パラメータ ldvl の誤り (ldvl が小さすぎる)
= -12: 入力パラメータ ldvr の誤り (ldvr が小さすぎる)
= -14: 入力パラメータ mm の誤り (mm < m)
= i > 0: i 個の固有ベクトルが収束しなかった. 詳細は ifaill[] および ifailr[] を参照せよ. |
- 出典
- LAPACK
|