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

◆ 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]Sigmamode = 3, 4 または 5 の場合, シフトを表す. mode = 1 または 2 の場合, 参照されない.
[in]BmatDsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと.
[in]NDsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと.
[in]WhichDsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと.
[in]NevDsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと.
[in]TolDsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと.
[in]Resid()配列 Resid(LResid - 1) (LResid >= N)
Dsaupd と同じ. Dsaupd の最終呼び出し後変更せずに渡すこと.
[in]NcvDsaupd と同じ. 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 の使用例を参照せよ.