内部で数値積分や常微分方程式を解いているため、 基本的に遅い。 しかし、単純な原理に基づいているため精度保証されていることが 明快に理解でき、また計算に使う型を変えることによって高精度計算を 行うこともできるので、役に立つ場面もあるのではないかと考えている。 現状複素数に対応していない。 順次対応させるつもりではあるが、予定は未定である。
詳細は、 ガンマ関数の精度保証付き計算メモ(Version: 2021/6/26) に書いた。
なお、gamma関数の極値点を計算するのにdigammaに対するKrawczyk法を行う関係で、 呼び出しの初回は非常に時間がかかる。
で定義される関数をLobachevsky関数という。 lobachevsky.hppの中に、関数lobachevskyがある。 interval<T>を入力し、interval<T>を出力する。
詳細はまだ書いてない。
アルゴリズムは、単純にAiry関数を定義する初期値問題
f''(t) = t f(t)を初期値
アルゴリズムは、積分 Jn(x) = 1/π * ∫0π cos(x sin t - nt) dt を計算するだけ。
非整数次の場合は、
Jnu(x) =
(x/2)nu / sqrt(π) / gamma(nu + 0.5)
* ∫0π cos(x * cos(t)) * sin(t)2nu dt
を計算。nu>-0.5が必要。
オイラーの積分表示を直接計算している。そのため、
c > b > 0, |z| < 1 のようなパラメータの制限がある。
計算方法は hypergeom.pdf (Version: 2015/11/8) の通り。 途中に出てくる区間公比を持つ等比級数の和の公式は、 geoseries.pdf (Version: 2015/11/8) にある。