std.mathspecial
数学の特殊関数を定義したモジュールです。 '特殊関数 (Special Functions)' というテクニカルタームには、 いくつかの種類の超越関数が含まれ、 数学や物理学の特定領域において重要な応用があります。 ガンマ関数や関連する関数と、誤差関数は 統計において必須の関数です。 Bessel関数やその関連は、 (特に光学において) 波動の伝搬に関連する問題で使われます。 その他に特殊関数として有名なものは、楕円積分(楕円の弧の長さに関係があります)や、 超幾何関数などがあります。 Status:さらに多数の関数がこのモジュールに追加される予定です。 分布関数 (gammaIncomplete 等) の命名規約はまだ決定しておらず、 将来的に変更される可能性があります。 Source:
std/mathspecial.d License:
Boost License 1.0. Authors:
Stephen L. Moshier (オリジナルの C 言語版). D への変換は Don Clugston による
- ガンマ関数, Γ(x)
Γ(x) は、
階乗関数を実数や複素数に一般化したものです。
x! 同様、 Γ(x+1) = x * Γ(x) が成り立ちます。
数学的には、 z.re > 0 ならば
Γ(z) = ∫0∞ tz-1e-t dt です。
Special Values x Γ(x) NAN NAN ±0.0 ±∞ integer > 0 (x-1)! integer < 0 NAN +∞ +∞ -∞ NAN - ガンマ関数 Γ(x) の自然対数
引数のガンマ関数の絶対値の、 底 e (2.718...)
での対数値を返します
実数に関しては、logGamma は log(fabs(gamma(x))) と同値です。
Special Values x logGamma(x) NAN NAN integer <= 0 +∞ ±∞ +∞ - Γ(x) の符号。 Γ(x) < 0 ならば -1、Γ(x) > 0 ならば +1、 符号が不定ならば NAN を返します。 この関数は、logGamma(x) と合わせて使うことで、非常に大きい x に対するガンマ関数の評価に使用できます。
- ベータ関数 beta 関数は以下で定義されます。 beta(x, y) = (Γ(x) * Γ(y)) / Γ(x + y)
- ディガンマ関数 digamma 関数はガンマ関数の対数の導関数です。 digamma(x) = d/dx logGamma(x)
- 不完全ベータ関数 ゼロから x までの不完全ベータ関数の積分値を返します。 正規化された不完全ベータ関数の定義は betaIncomplete(a, b, x) = Γ(a + b) / ( Γ(a) Γ(b) ) * ∫0x ta-1(1-t)b-1 dt で、累積密度関数と同じです。 定義域は 0 <= x <= 1 です。 この実装では、a と b は正の値のみを指定できます。 x から 1 までの積分は以下の対称関係で求まります。 betaIncompleteCompl(a, b, x ) = betaIncomplete( b, a, 1-x ) 積分の計算は、連分数展開か、 または b * x が小さければベキ級数展開で行われます。
- 不完全ベータ関数の逆関数。 与えられた y に対し、この関数は以下を満たす x を見つけて返します。 betaIncomplete(a, b, x) == y ニュートン法か区間縮小法によって計算されます。
- 不完全ガンマ関数 これらの関数は以下で定義されます。 gammaIncomplete = ( ∫0x e-t ta-1 dt )/ Γ(a) gammaIncompleteCompl(a,x) = 1 - gammaIncomplete(a,x) = (∫x∞ e-t ta-1 dt )/ Γ(a) この実装では、引数はどちらも正である必要があります。 積分の計算は a と x の相対的な値に応じて、 ベキ級数か、 または連分数展開のどちらかが使われます。
- 不完全ガンマ関数の逆関数です。 与えられた a と y に対し、この関数は以下を満たす x を見つけて返します。 gammaIncompleteCompl( a, x ) = p.
- 誤差関数 以下の積分の結果です。 erf(x) = 2/ √(π) ∫0x exp( - t2) dt x の magnitude は、IEEE 80-bit 演算で、 106.56 に制限されています。この範囲を超えると 1 または -1 を返します。
- 余誤差関数。 erfc(x) = 1 - erf(x) = 2/ √(π) ∫x∞ exp( - t2) dt この関数は、x がゼロから遠いほど、 相対精度が高まります。(ゼロに近い値に対しては、erf(x) を使用して下さい)
- 正規分布。
正規 (ガウス, ベル型) 分布は、
以下で定義されます:
normalDist(x) = 1/√ π ∫-∞x exp( - t2/2) dt
= 0.5 + 0.5 * erf(x/sqrt(2))
= 0.5 * erfc(- x/sqrt(2))
x が 1.0 に近いときの精度を保つには、
normalDistribution(x) = 1.0 - normalDistribution(-x) を使用して下さい。
References:
http://www.netlib.org/cephes/ldoubdoc.html, G. Marsaglia, "Evaluating the Normal Distribution", Journal of Statistical Software 11, (July 2004). - 正規分布の逆関数。 正規分布の密度関数を負の無限大から x まで積分したときの面積が p と等しくなるような引数 x を返します。