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

◆ dseupd()

void dseupd ( int  rvec,
char  howmny,
int  select[],
double  d[],
int  ldz,
double  z[],
double  sigma,
char  bmat,
int  n,
const char *  which,
int  nev,
double  tol,
double  resid[],
int  ncv,
int  ldv,
double  v[],
int  iparam[],
int  ipntr[],
double  workd[],
double  workl[],
int  lworkl,
int *  info 
)

ランチョス分解の近似固有値・固有ベクトル (対称疎行列)

目的
本ルーチンは固有値問題 A*z = λ*B*z の近似固有値(リッツ値)および(必要であれば)対応する近似固有ベクトル(リッツベクトル)を求める.

これらの値は dsaupd が返す線形演算子 OP および行列 B のランチョス分解(詳細は dsaupd のマニュアルの「目的」の項を参照)より計算される. 本ルーチン呼び出しの前に dsaupd を呼び出しておかなければならない.

近似固有値は昇順に格納される.

引数 bmat, n, which, nev, tol, resid, ncv, v, ldv, iparam, ipntr, workd, workl および lworkl は dsaupd の最後の呼び出し後, 変更することなく本ルーチンに渡さなければならない. これらのうち ipntr および workl は本ルーチンによって変更される.
引数
[in]rvec固有値問題 A*z = λ*B*z のリッツ値に対応するリッツベクトルを求めるかどうか指定する.
= false (0): リッツ値のみ求める.
= true (1): リッツベクトルも求める.
[in]howmny何個のリッツベクトルを求めるか指定する.
= 'A': nev 個のリッツベクトルを求める.
[out]select[]配列 select[lselect] (lselect >= ncv)
リッツ値並べ替えのための作業領域として使用される.
[out]d[]配列 d[ld] (ld >= nev)
A*z = λ*B*z の固有値を近似するリッツ値を返す. 値は昇順に格納される. mode = 3, 4 または 5 の場合, dsaupd によって求められた OP のリッツ値をもとの固有値問題 A*z = λ*B*z のリッツ値に変換したものである. mode = 1 または 2 の場合, OP のリッツ値は A*z = λ*B*z のそれに等しい.
[in]ldz配列 z の整合寸法 (リッツベクトルを求めるとき ldz >= max(1, n), そうでないとき ldz >= 1)
[out]z[]配列 z[ldz * lz] (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] (lresid >= n)
dsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと.
[in]ncvdsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと.
[in]ldvdsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと.
[in]v[]配列 v[ldv * lv] (lv >= ncv)
dsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと.
[in]iparam[]配列 iparam[liparam] (liparam >= 11)
dsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと.
[in,out]ipntr[]配列 ipntr[lipntr] (lipntr >= 11)
[in] dsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと.
[out] ipntr[7] 〜 ipntr[9] には workl へのポインターが入る.
ipntr[7]: 元の式の ncv 個のリッツ値へのポインター.
ipntr[8]: ncv 個のそれぞれの誤差限界へのポインター.
ipntr[9]: 三重対角行列 T の固有ベクトルからなる ncv x ncv 行列へのポインター. rvec = true (1) の場合にのみ参照される.
[in]workd[]配列 workd[lworkd] (lworkd >= 3*n)
dsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと.
[in,out]workl[]配列 workl[lworkl]
[in] dsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと. workl[0] 〜 workl[4*ncv - 1] には dsaupd で得られた情報が入っている. これらは dseupd によって変更されることはない.
[out] workl[4*ncv] 〜 workl[ncv^2 + 8*ncv - 1] には変換していないリッツ値, 誤差推定値および H の関連する固有ベクトル行列が入る.
[in]lworkldsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと.
[out]infoリターンコード.
= 0: 正常終了.
< 0: (-info)番目の入力パラメータの誤り.
= 11: 初期残差ベクトルが 0 である.
= 12: dsaupd は十分な精度の固有値を得られなかった.
= 13: dseupd が得た変換後のリッツ値の数が dsaupd が得た数と異なる.
= 14: LAPACK ルーチンで固有値の計算に失敗した.
出典
ARPACK-NG (https://github.com/opencollab/arpack-ng)