|
|
◆ zneupd()
| void zneupd |
( |
int |
rvec, |
|
|
char |
howmny, |
|
|
int |
select[], |
|
|
doublecomplex |
d[], |
|
|
int |
ldz, |
|
|
doublecomplex |
z[], |
|
|
doublecomplex |
sigma, |
|
|
doublecomplex |
workev[], |
|
|
char |
bmat, |
|
|
int |
n, |
|
|
const char * |
which, |
|
|
int |
nev, |
|
|
double |
tol, |
|
|
doublecomplex |
resid[], |
|
|
int |
ncv, |
|
|
int |
ldv, |
|
|
doublecomplex |
v[], |
|
|
int |
iparam[], |
|
|
int |
ipntr[], |
|
|
doublecomplex |
workd[], |
|
|
doublecomplex |
workl[], |
|
|
int |
lworkl, |
|
|
double |
rwork[], |
|
|
int * |
info |
|
) |
| |
アーノルディ分解の近似固有値・固有ベクトル (複素疎行列)
- 目的
- 本ルーチンは固有値問題 A*z = λ*B*z の近似固有値および(必要であれば)対応する近似固有ベクトルを求める.
これらの値は znaupd が返す複線形演算子 OP および行列 B のアーノルディ分解(詳細は znaupd のマニュアルの「目的」の項を参照)より計算される. 本ルーチン呼び出しの前に znaupd を呼び出しておかなければならない.
近似固有値は昇順に格納される.
引数 bmat, n, which, nev, tol, resid, ncv, v, ldv, iparam, ipntr, workd, workl, lworkl および rwork は znaupd の最後の呼び出し後, 変更することなく本ルーチンに渡さなければならない. これらのうち v, ipntr および workl は本ルーチンによって変更される.
- 引数
-
| [in] | rvec | 固有値問題 A*z = λ*B*z の近似リッツ値に対応する不変部分空間の基底を求めるかどうか指定する.
= false (0): リッツ値のみ求める.
= true (1): リッツベクトルまたはシュールベクトルも求める. |
| [in] | howmny | 求めるリッツ値に対応する不変部分空間の基底の形式を指定する.
= 'A': nev 個のリッツベクトルを求める.
= 'P': nev 個のシュールベクトルを求める.
= 'S': 配列 select[] で指定されたリッツベクトルを求める. |
| [out] | select[] | 配列 select[lselect] (lselect >= ncv)
howmny = 'S' の場合, select[] は求めるリッツベクトルを指定する. リッツ値 d[j] に対応するリッツベクトルを選択するには, select[j] を true (1) に設定する必要がある. howmny = 'A' または 'P' の場合, select[] は内部ワークスペースとして使用される. |
| [out] | d[] | 配列 d[ld] (ld >= nev)
A*z = λ*B*z の固有値のリッツ値による近似が入る. |
| [in] | ldz | 配列 z の整合寸法 (リッツベクトルを求めるとき ldz >= n, そうでないとき ldz >= 1) |
| [out] | z[] | 配列 z[ldz * lz] (lz >= nev)
rvec = truw (1) かつ howmny = 'A' の場合, z[][] の列は 固有値問題 A*z = λ*B*z の nconv (iparam[4]) 個のリッツ値に対応する近似固有ベクトル(リッツベクトル)を表す.
rvec = false (0) または howmny = 'P' の場合, z[] は参照されない. |
| [in] | sigma | mode = 3 の場合, シフトを表す. mode = 1 または 2 の場合, 参照されない. |
| [out] | workev[] | 配列 workev[lworkev] (lworkev >= 2*ncv)
ワークスペース. |
| [in] | bmat | znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | n | znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | which | znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | nev | znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | tol | znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | resid[] | 配列 resid[lresid] (lresid >= n)
znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | ncv | znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in] | ldv | znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in,out] | v[] | 配列 v[ldv * lv] (lv >= ncv)
[in] znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと.
[out] rvec = true (1) であれば, はじめの nconv 列に求められる不変部分空間を張る近似シュールベクトルが入る. |
| [in] | iparam[] | 配列 iparam[liparam] (liparam >= 11)
znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in,out] | ipntr[] | 配列 ipntr[lipntr] (lipntr >= 14)
[in] znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと.
[out] ipntr[8] 〜 ipntr[12] には workl へのポインターが入る.
ipntr[8]: 元の式の ncv 個のリッツ値へのポインター.
ipntr[9]: 使用されない.
ipntr[10]: ncv 個のそれぞれの近似誤差へのポインター.
ipntr[11]: H の ncv x ncv 上三角シュール行列へのポインター.
ipntr[12]: 上ヘッセンベルグ行列 H の固有ベクトルからなる ncv x ncv 行列へのポインター. rvec = true (1) のときにのみ参照される. |
| [in] | workd[] | 配列 workd[lworkd] (lworkd >= 3*n)
znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [in,out] | workl[] | 配列 workl[lworkl]
[in] znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. workl[0] 〜 workl[ncv^2 + 2*ncv - 1] には znaupd で得られた情報が入っている. これらは dneupd によって変更されることはない.
[out] workl[ncv^2 + 2*ncv] 〜 workl[3*ncv^2 + 4*ncv - 1] には変換していないリッツ値の誤差限界, H の上疑三角行列, および H の関連する不変部分空間の行列表現が入る. |
| [in] | lworkl | znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [out] | rwork[] | 配列 rwork[lrwork] (lrwork >= ncv)
znaupd と同じ. znaupd の最終呼び出し後変更せずに渡すこと. |
| [out] | info | リターンコード.
= 0: 正常終了.
< 0: (-info)番目の入力パラメータの誤り.
= 11: LAPACK ルーチン DLAHQR によって求められたシュール形を LAPACK ルーチン DTRSEN によって並べ替えることができなかった.
= 12: znaupd は十分な精度の固有値を得られなかった.
= 13: zneupd が得た変換後のリッツ値の数が znaupd が得た数と異なる.
= 14: LAPACK ルーチンで固有値の計算に失敗した.
= 15: 固有ベクトルの計算に失敗した (LAPACK ルーチン ZTREVC). |
- 出典
- ARPACK-NG (https://github.com/opencollab/arpack-ng)
|