2using System.Collections.Generic;
20 public static double Erf(
double x)
32 Term = x * Product / (2 * n + 1);
35 while (Math.Abs(Term) > 1e-10);
47 public static Complex
Erf(Complex z)
59 Term = z * Product / (2 * n + 1);
62 while (Complex.Abs(Term) > 1e-10);
69 private static readonly
double erfC = 2 / Math.Sqrt(Math.PI);
80 public static double Γ(
double x)
86 return Math.PI / (Math.Sin(Math.PI * x) *
Γ(1 - x));
92 double w = Math.Pow(v, x - 0.5);
93 double u = 0.99999999999980993;
95 u += 676.5203681218851 / x++;
96 u += -1259.1392167224028 / x++;
97 u += 771.32342877765313 / x++;
98 u += -176.61502916214059 / x++;
99 u += 12.507343278686905 / x++;
100 u += -0.13857109526572012 / x++;
101 u += 9.9843695780195716e-6 / x++;
102 u += 1.5056327351493116e-7 / x++;
104 return gammaC * w * Math.Exp(-v) * u;
113 public static Complex
Γ(Complex z)
119 return Math.PI / (Complex.Sin(Math.PI * z) *
Γ(1 - z));
125 Complex w = Complex.Pow(v, z - 0.5);
126 Complex u = 0.99999999999980993;
128 u += 676.5203681218851 / z;
129 u += -1259.1392167224028 / (z + 1);
130 u += 771.32342877765313 / (z + 2);
131 u += -176.61502916214059 / (z + 3);
132 u += 12.507343278686905 / (z + 4);
133 u += -0.13857109526572012 / (z + 5);
134 u += 9.9843695780195716e-6 / (z + 6);
135 u += 1.5056327351493116e-7 / (z + 7);
137 return gammaC * w * Complex.Exp(-v) * u;
141 private static readonly
double gammaC = Math.Sqrt(2 * Math.PI);
149 public static double γ(
double a,
double x)
154 double c = Math.Abs(a);
155 if (c > 1.1 && Math.Abs(x) > c)
156 return Γ(a) -
Γ(a, x);
158 return γ(a, x, 1e-10);
161 private static double γ(
double a,
double x,
double eps)
163 double c = Math.Pow(x, a) * Math.Exp(-x);
176 while (Math.Abs(Term) > eps);
187 public static Complex
γ(Complex a, Complex z)
189 if (z == Complex.Zero)
192 double c = Complex.Abs(a);
193 if (c > 1.1 && Complex.Abs(z) > c)
194 return Γ(a) -
Γ(a, z);
196 return γ(a, z, 1e-10);
199 private static Complex
γ(Complex a, Complex z,
double eps)
201 Complex c = Complex.Pow(z, a) * Complex.Exp(-z);
204 Complex Term = n / d;
216 while (Complex.Abs(Term) > eps);
227 public static double Γ(
double a,
double x)
232 double c = Math.Abs(a);
233 if (c <= 1.1 || Math.Abs(x) <= c)
234 return Γ(a) -
γ(a, x);
239 private static double Γ(
double a,
double x,
int N)
245 for (i = N; i > 0; i--)
247 d = q + 1 + 2 * i + x - a;
252 n = Math.Pow(x, a) * Math.Exp(-x);
263 public static Complex
Γ(Complex a, Complex z)
265 if (z == Complex.Zero)
268 double c = Complex.Abs(a);
269 if (c <= 1.1 || Complex.Abs(z) <= c)
270 return Γ(a) -
γ(a, z);
275 private static Complex
Γ(Complex a, Complex z,
int N)
281 for (i = N; i > 0; i--)
283 d = q + 1 + 2 * i + z - a;
288 n = Complex.Pow(z, a) * Complex.Exp(-z);
303 public static double Β(
double a,
double b)
305 return Γ(a) *
Γ(b) /
Γ(a + b);
314 public static Complex
Β(Complex a, Complex b)
316 return Γ(a) *
Γ(b) /
Γ(a + b);
Contains Numerical Methods to compute mathematical functions needed for probabilistic computations.
static Complex Β(Complex a, Complex b)
Beta-function Β(a,b)
static double Β(double a, double b)
Beta-function Β(a,b)
static double Γ(double x)
Gamma function Γ(x), for real-valued arguments.
static double Erf(double x)
Error function erf(x)
static Complex Γ(Complex a, Complex z)
Incomplete gamma function Γ(a,z), γ(a,z)+Γ(a,z)=Γ(a)
static Complex γ(Complex a, Complex z)
Incomplete gamma function γ(a,z)→Γ(a),z→∞
static Complex Γ(Complex z)
Gamma function Γ(x), for real-valued arguments.
static double γ(double a, double x)
Incomplete gamma function γ(a,x)→Γ(a),x→∞
static double Γ(double a, double x)
Incomplete gamma function Γ(a,x), γ(a,x)+Γ(a,x)=Γ(a)
static Complex Erf(Complex z)
Error function erf(z)