17.3.8 Igamma

igamma(a, z) は、下方 (正規化) 不完全ガンマ関数 P(a, z) を返します
[Abramowitz and Stegun (6.5.1); NIST DLMF 8.2.4]。複素関数サポートが

あれば、a と z は real(a) > 0 の複素数値も許されます。 逆に、上方不完全ガンマ関数に関しては、以下参照: uigamma (17.3.18)

        igamma (a, z) = P(a, z) = za$\gamma^{*}_{}$(a, z) = ${\frac{{1}}{{\Gamma(z)}}}$$\intop_{{0}}^{{z}}$ta-1e-tdt

a, z の値に依存して、以下の 4 つのアルゴリズムを使用します。
ケース (1) a が大きく (>100) (z-a)/a が小さい (<0.2) 場合、 Numerical Recipes 第 3 版 6.2 節 (2007) にある係数での Gauss-Legendre 数値積分公式を利用します。
ケース (2) z > 1 で z > (a+2) の場合、Shea (1988) J. Royal Stat. Soc. Series C (Applied Statistics) 37:466-473 の連分数を利用します。
ケース (3) z < 0 で a < 75 で imag(a) == 0 の場合は、Abramowitz & Stegun (6.5.29) の数列を利用します。
ケース (4) その他の場合は、Peason の級数展開を利用します。

全平面では、ある領域でその収束は良くないことに注意してください。選択し たアルゴリズムで 1.E-14 の範囲で収束しなければ、関数は NaN を返し、警 告を表示します。

複素関数サポートがない場合は、定義域は実数の引数の a > 0, z >= 0 に制 限されます。

竹野茂治@新潟工科大学
2021-06-25