|
|
◆ 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] | 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] (lresid >= n)
dsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | ncv | dsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | ldv | dsaupd と同じ. 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] | lworkl | dsaupd と同じ. dsaupd の最終呼び出し後変更せずに渡すこと. |
| [out] | info | リターンコード.
= 0: 正常終了.
< 0: (-info)番目の入力パラメータの誤り.
= 11: 初期残差ベクトルが 0 である.
= 12: dsaupd は十分な精度の固有値を得られなかった.
= 13: dseupd が得た変換後のリッツ値の数が dsaupd が得た数と異なる.
= 14: LAPACK ルーチンで固有値の計算に失敗した. |
- 出典
- ARPACK-NG (https://github.com/opencollab/arpack-ng)
|