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による戻り値)を除く出力パラメータを記載。

  • dsyevxdsyevrは、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では使えるようにしたい。
  • 何も引数を指定しない場合、全固有値(と全固有ベクトル)を求める。