|
|
◆ Dstein()
| Sub Dstein |
( |
N As |
Long, |
|
|
D() As |
Double, |
|
|
E() As |
Double, |
|
|
M As |
Long, |
|
|
W() As |
Double, |
|
|
Iblock() As |
Long, |
|
|
Isplit() As |
Long, |
|
|
Z() As |
Double, |
|
|
Ifail() As |
Long, |
|
|
Info As |
Long |
|
) |
| |
対称三重対角行列の固有ベクトル (逆反復法)
- 目的
- 本ルーチンは実対称三重対角行列 T の指定された固有値に対応する固有ベクトルを逆反復法により求める.
各固有ベクトルの計算に許される最大反復回数は内部パラメータ Maxits (現在 5 に設定されている) で指定される.
- 引数
-
| [in] | N | 三重対角行列の行および列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る) |
| [in] | D() | 配列 D(LD - 1) (LD >= N)
三重対角行列 T の N 個の対角要素. |
| [in] | E() | 配列 E(LE - 1) (LE >= N - 1)
三重対角行列 T の N - 1 個の副対角要素. |
| [in] | M | 求める固有ベクトルの数 (0 <= M <= N) |
| [in] | W() | 配列 W(LW - 1) (LW >= N)
W() の先頭 M 個にその固有ベクトルを求める固有値を入れる. 固有値は分割されたブロックごとにグループ分けされ, ブロック内で最小から最大の順に並べられていること. (Order = "B" とした Dstebz の出力である配列 W() が想定されている.) |
| [in] | Iblock() | 配列 Iblock(LIblock - 1) (LIblock >= N)
W() 内の固有値に対応する小行列のインデックス. 固有値 W(i) が先頭の小行列に属するとき Iblock(i) = 1, W(i) が2つ目の小行列に属するときは 2, ... である. (Dstebz の出力である配列 Iblock() が想定されている.) |
| [in] | Isplit() | 配列 Isplit(LIsplit - 1) (LIsplit >= N)
T が小行列に分割する分割点. 最初の小行列は行/列 1 〜 Isplit(0), 2番目は行/列 Isplit(0) + 1 〜 Isplit(1), ... よりなる. (Dstebz の出力である配列 Isplit() が想定されている.) |
| [out] | Z() | 配列 Z(LZ1 - 1, LZ2 - 1) (LZ1 >= N, LZ2 >= M)
求められた固有ベクトル. 固有値 W(i) に関連する固有ベクトルが Z() の i 列に入る. 収束に失敗したときは Maxits 回の反復後時点のベクトルが設定される. |
| [out] | Ifail() | 配列 Ifail(LIfail - 1) (LIfail >= M)
正常終了時, Ifail() のすべての要素はゼロである. 1つあるいは複数の固有ベクトルが Maxits 回の反復で収束しなかったならばそれらのインデックスが配列 Ifail() に格納される. |
| [out] | Info | = 0: 正常終了.
= -1: パラメータ N の誤り. (N < 0)
= -2: パラメータ D() の誤り.
= -3: パラメータ E() の誤り.
= -4: パラメータ M の誤り. (M < 0 または M > N)
= -5: パラメータ W() の誤り.
= -6: パラメータ Iblock() の誤り.
= -7: パラメータ Isplit() の誤り.
= -8: パラメータ Z() の誤り.
= -9: パラメータ Ifail() の誤り.
= i > 0: i 個の固有ベクトルが Maxits 回の反復で収束しなかった. そのインデックスが Ifail() に格納される. |
- 出典
- LAPACK
- 使用例
- Dstebzの使用例を参照せよ.
|