D 2.0
About Japanese Translation

Last update Thu Sep 16 11:25:59 2010

std.mathspecial

数学の特殊関数を定義したモジュールです。

'特殊関数 (Special Functions)' というテクニカルタームには、 いくつかの種類の超越関数が含まれ、 数学や物理学の特定領域において重要な応用があります。

ガンマ関数や関連する関数と、誤差関数は 統計において必須の関数です。 Bessel関数やその関連は、 (特に光学において) 波動の伝搬に関連する問題で使われます。 その他に特殊関数として有名なものは、楕円積分(楕円の弧の長さに関係があります)や、 超幾何関数などがあります。

Status:
さらに多数の関数がこのモジュールに追加される予定です。 分布関数 (gammaIncomplete 等) の命名規約はまだ決定しておらず、 将来的に変更される可能性があります。

Source:
std/mathspecial.d

License:
Boost License 1.0.

Authors:
Stephen L. Moshier (オリジナルの C 言語版). D への変換は Don Clugston による

real gamma(real x);
ガンマ関数, Γ(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

real logGamma(real x);
ガンマ関数 Γ(x) の自然対数

引数のガンマ関数の絶対値の、 底 e (2.718...) での対数値を返します

実数に関しては、logGamma は log(fabs(gamma(x))) と同値です。

Special Values
x logGamma(x)
NAN NAN
integer <= 0 +∞
±∞ +∞

real sgnGamma(real x);
Γ(x) の符号。

Γ(x) < 0 ならば -1、Γ(x) > 0 ならば +1、 符号が不定ならば NAN を返します。

この関数は、logGamma(x) と合わせて使うことで、非常に大きい x に対するガンマ関数の評価に使用できます。

real beta(real x, real y);
ベータ関数

beta 関数は以下で定義されます。

beta(x, y) = (Γ(x) * Γ(y)) / Γ(x + y)

real digamma(real x);
ディガンマ関数

digamma 関数はガンマ関数の対数の導関数です。

digamma(x) = d/dx logGamma(x)

real betaIncomplete(real a, real b, real x);
不完全ベータ関数

ゼロから x までの不完全ベータ関数の積分値を返します。 正規化された不完全ベータ関数の定義は

betaIncomplete(a, b, x) = Γ(a + b) / ( Γ(a) Γ(b) ) * 0x ta-1(1-t)b-1 dt

で、累積密度関数と同じです。

定義域は 0 <= x <= 1 です。 この実装では、ab は正の値のみを指定できます。 x から 1 までの積分は以下の対称関係で求まります。

betaIncompleteCompl(a, b, x ) = betaIncomplete( b, a, 1-x )

積分の計算は、連分数展開か、 または b * x が小さければベキ級数展開で行われます。

real betaIncompleteInverse(real a, real b, real y);
不完全ベータ関数の逆関数。

与えられた y に対し、この関数は以下を満たす x を見つけて返します。

betaIncomplete(a, b, x) == y

ニュートン法か区間縮小法によって計算されます。

real gammaIncomplete(real a, real x);
real gammaIncompleteCompl(real a, real x);
不完全ガンマ関数

これらの関数は以下で定義されます。

gammaIncomplete = ( 0x e-t ta-1 dt )/ Γ(a)

gammaIncompleteCompl(a,x) = 1 - gammaIncomplete(a,x) = (x e-t ta-1 dt )/ Γ(a)

この実装では、引数はどちらも正である必要があります。 積分の計算は ax の相対的な値に応じて、 ベキ級数か、 または連分数展開のどちらかが使われます。

real gammaIncompleteComplInverse(real a, real x);
不完全ガンマ関数の逆関数です。

与えられた a と y に対し、この関数は以下を満たす x を見つけて返します。

gammaIncompleteCompl( a, x ) = p.

real erf(real x);
誤差関数

以下の積分の結果です。

erf(x) = 2/ √(π) 0x exp( - t2) dt

x の magnitude は、IEEE 80-bit 演算で、 106.56 に制限されています。この範囲を超えると 1 または -1 を返します。

real erfc(real x);
余誤差関数。

erfc(x) = 1 - erf(x) = 2/ √(π) x exp( - t2) dt

この関数は、x がゼロから遠いほど、 相対精度が高まります。(ゼロに近い値に対しては、erf(x) を使用して下さい)

real normalDistribution(real 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).

real normalDistributionInverse(real p);
正規分布の逆関数。

正規分布の密度関数を負の無限大から x まで積分したときの面積が p と等しくなるような引数 x を返します。