RokkoInterfaceSerialDenseSolvers - t-sakashita/rokko GitHub Wiki
密行列ソルバ(逐次版)のインターフェース
- 表中でデフォルトとは、
eigen3:
およびlapack:
(コロンはなしでも良い)のようにライブラリ名だけが与えられた場合に選択されるルーチンを指す。
Eigen3
標準固有値問題のみ
Rokkoルーチン名 | 元々のルーチン名 | 解法 | 入力パラメータ(オプション) | 出力パラメータ | 備考 |
---|---|---|---|---|---|
eigen3:qr | SelfAdjointEigensolver | QR法 | なし | なし | Eigen3のデフォルト |
LAPACK
標準固有値問題
Rokkoルーチン名 | 元々のルーチン名 | 解法 | 入力パラメータ(オプション) | 出力パラメータ | 備考 |
---|---|---|---|---|---|
lapack:dsyev lapack:qr | dsyev | QR法 | uplow | なし | LAPACKの引数なしのデフォルト |
lapack:dsyevx | dsyevx | QR法/2分法 | upper_indexとlower_index(またはupper_valueとlower_value), abstol, uplow | m, ifail | abstol>0のとき、2分法のみ, abstol<0のとき、QR法 |
lapack:bisection | dsyevx | 2分法 | upper_indexとlower_index(またはupper_valueとlower_value), abstol, uplow | m, fail | dsyevxをabstol>0として使用 |
lapack:dsyevr lapack:mr3 | dsyevr | MR3法 | upper_indexとlower_index(またはupper_valueとlower_value), abstol, uplow | m, isuppz | LAPACKの固有値範囲指定ありのデフォルト |
lapack:dsyevd lapack:dc | dsyevd | 分割統治法 | uplow | なし |
一般化固有値問題
Rokkoルーチン名 | 元々のルーチン名 | 解法 | 入力パラメータ(オプション) | 出力パラメータ | 備考 |
---|---|---|---|---|---|
lapack:dsygv lapack:qr | dsygv | QR法 | uplow | なし | LAPACKの引数なしのデフォルト |
lapack:dsygvx | dsygvx | QR法/2分法 | upper_indexとlower_index(またはupper_valueとlower_value), abstol, uplow | m, ifail | abstol>0のとき、2分法のみ, abstol<0のとき、QR法 |
lapack:bisection | dsygvx | 2分法 | upper_indexとlower_index(またはupper_valueとlower_value), abstol, uplow | m, fail | dsygvxをabstol>0として使用 |
lapack:dsygvd lapack:dc | dsygvd | 分割統治法 | uplow | なし |
-
uplow
-
上三角:"upper", 'U'
-
下三角:"lower", 'L'
-
LAPACKでは、一文字で良いのに"Upper"を渡すユーザもいる。そのため、最初の一文字だけを見て判断する
-
大文字と小文字のどちらでも良い。
-
いずれのルーチンも、固有値のみ、固有値・固有ベクトルを選べる。どちらを求めるかは、diagonalize関数に渡す引数で決まる。
-
いずれのルーチンも、必須の入力パラメータは、固有値、(求める場合)固有値ベクトルだけ。
-
表には、
info
(returnによる戻り値)を除く出力パラメータを記載。 -
dsyevx
とdsyevr
は、abstol
をパラメータにとる。省略すると、最適な値が設定されるので、省略することを推奨。
検討
abstol
は、LAPACK独特の収束判定に用いるパラメータと考えられる。そのため、Rokkoにおける共通パラメータ名でも同じ名前とする。
ABSTOL + EPS * max( |a|,|b| ) ここで、[a,b]は固有値を求める区間
- LAPACKの元々のパラメータの全セットも受け取れるようにする?
- char range='A'(全固有値)は、diagonalize関数の引数で判断できるが、サポートする? このとき、同時にvl, vuが指定されていれば無視する。
- LAPACKに慣れているユーザには便利。
- LAPACKのQR法のabstol
- dsyevにおいては、abstolに最適な値が設定される。ユーザがabstolの値を変えることはできない。
- abstol指定を指定したい場合は、dsyevxをabstol<0で使用すれば良い。
- とはいっても、dsyevで最適な値が設定されるので、敢えてabstolを設定する必要がない。
- dsyevx使用時には、verbose=trueの場合、警告を出すことにしようか。
共通の入力パラメータ(オプション)
Rokkoのパラメータ名 | LAPACKのパラメータ名 | 型 | 意味 | 値 | 備考 |
---|---|---|---|---|---|
matrix_part | uplow | std::string (charや文字列は変換して格納) | 上三角と下三角のうちどちらが読まれるか | upper(U), lower(L) | 最初の一文字で判断。大文字か小文字かはどちらでも良い。デフォルトは、'U' |
abstol | abstol | double | |||
upper_index | iu | int | 求めたい固有値の番号の上限(番号は昇順につけられる) | ||
upper_value | vu | double | 求めたい固有値の範囲の上限 | ||
lower_index | il | int | 求めたい固有値の番号の下限(番号は昇順につけられる) | ||
lower_value | vl | double | 求めたい固有値の範囲の下限 | ||
verbose | なし | bool | Rokko側で用意した表示ルーチン。ソルバに設定した入力パラメータ、エラーの詳細を表示。 | デフォルトはfalse |
- Rokkoのパラメータ名とLAPACKのパラメータ名の両方を、Rokkoでは使えるようにしたい。
- 何も引数を指定しない場合、全固有値(と全固有ベクトル)を求める。