|
|
◆ Dseupd()
| Sub Dseupd |
( |
Rvec As |
Long, |
|
|
Howmny As |
String, |
|
|
Selct() As |
Long, |
|
|
D() As |
Double, |
|
|
Z() As |
Double, |
|
|
Sigma As |
Double, |
|
|
Bmat As |
String, |
|
|
N As |
Long, |
|
|
ByVal Which As |
String, |
|
|
Nev As |
Long, |
|
|
Resid() As |
Double, |
|
|
Ncv As |
Long, |
|
|
V() As |
Double, |
|
|
IParam() As |
Long, |
|
|
Ipntr() As |
Long, |
|
|
Workd() As |
Double, |
|
|
Workl() As |
Double, |
|
|
Info As |
Long, |
|
|
Optional Tol As |
Double = 0 |
|
) |
| |
ランチョス分解の近似固有値・固有ベクトル (対称疎行列) (Arpack)
- 目的
- 本ルーチンは固有値問題 A*z = λ*B*z の近似固有値(リッツ値)および(必要であれば)対応する近似固有ベクトル(リッツベクトル)を求める.
これらの値は Dsaupd が返す線形演算子 OP および行列 B のランチョス分解(詳細は Dsaupd のマニュアルの「目的」の項を参照)より計算される. 本ルーチン呼び出しの前に Dsaupd を呼び出しておかなければならない.
近似固有値は昇順に格納される.
引数 Bmat, N, Which, Nev, Tol, Resid, Ncv, V, Iparam, Ipntr, Workd および Workl は Dsaupd の最後の呼び出し後, 変更することなく本ルーチンに渡さなければならない. これらのうち Ipntr および Workl は本ルーチンによって変更される.
- 引数
-
| [in] | Rvec | 固有値問題 A*z = λ*B*z のリッツ値に対応するリッツベクトルを求めるかどうか指定する.
= 0 (False): リッツ値のみ求める.
= 1 (True): リッツベクトルも求める.
他の値であれば Rvec = 0 とみなす. |
| [in] | Howmny | 何本のリッツベクトルが必要か, また, Z (リッツベクトルよりなる行列) の形式を指定する.
= "A": Nev 個のリッツベクトルを求める. |
| [out] | Selct() | 配列 Selct(LSelct - 1) (LSelct >= Ncv)
Howmny = "A" の場合, リッツ値並べ替えのための作業領域として使用される. |
| [out] | D() | 配列 D(LD - 1) (LD >= Nev)
A*z = λ*B*z の固有値を近似するリッツ値を返す. 値は昇順に格納される. mode = 3, 4 または 5 の場合, Dsaupd によって求められた OP のリッツ値をもとの固有値問題 A*z = λ*B*z のリッツ値に変換したものである. mode = 1 または 2 の場合, OP のリッツ値は A*z = λ*B*z のそれに等しい. |
| [out] | Z() | 配列 Z(Ldz - 1, LZ - 1) (Ldz >= N, LZ >= Nev)
固有値問題 A*z = λ*B*z のリッツ値に対応する B に関して正規直交なリッツベクトルを返す.
Rvec = 0 の場合, Z() は参照されない. |
| [in] | Sigma | mode = 3, 4 または 5 の場合, シフトを表す. mode = 1 または 2 の場合, 参照されない. |
| [in] | Bmat | Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | N | Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | Which | Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | Nev | Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | Tol | Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | Resid() | 配列 Resid(LResid - 1) (LResid >= N)
Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | Ncv | Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | V() | 配列 V(Ldv - 1, LV - 1) (Ldv >= N, LV >= Ncv)
Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | Iparam() | 配列 Iparam(LIparam - 1) (LIparam >= 11)
Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in,out] | Ipntr() | 配列 Ipntr(LIpntr - 1) (LIpntr >= 11)
[in] Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと.
[out] Ipntr(7) 〜 Ipntr(9) には Workl へのポインターが入る.
Ipntr(7): 元の式の Ncv 個のリッツ値へのポインター.
Ipntr(8): 対応する Ncv 個の誤差限界へのポインター.
Ipntr(9): 三重対角行列 T の固有ベクトルをからなる Ncv x Ncv 行列へのポインター. Rvec = 1 (True) のにのみ参照される. |
| [in] | Workd() | 配列 Workd(LWorkd - 1) (LWorkd >= 3*N)
Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in,out] | Workl() | 配列 Workl(LWorkl - 1) (LWorkl >= Ncv*(Ncv + 8))
[in] Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと. Workl(0) 〜 Workl(4*Ncv - 1) には Dsaupd で得られた情報が入っている. これらは本ルーチンによって変更されることはない.
[out] Workl(4*ncv) 〜 Workl(Ncv^2 + 8*ncv - 1) には変換していないリッツ値, 誤差推定値および H の関連する固有ベクトル行列が入る. |
| [out] | Info | リターンコード.
= 0: 正常終了.
< 0: (-Info)番目の入力パラメータの誤り.
= 11: 初期残差ベクトルが 0 である.
= 12: Dsaupd は十分な精度の固有値を得られなかった.
= 13: Dseupd が得た変換後のリッツ値の数が Dsaupd が得た数と異なる.
= 14: 三重対角行列の固有値の計算に失敗した (LAPACK ルーチン DSTEQR). |
- 出典
- ARPACK-NG (https://github.com/opencollab/arpack-ng)
- 使用例
- Dsaupd の使用例を参照せよ.
|