Son muy avanzados los cálculos? Yo creo que seguro entra...
Mirá que hay bastante memoria disponible por ahora...
Algunos son complicados, otros para nada, de la biblioteca Math (de C# en este caso), uso solo estas funciones
Log, Abs, Exp, Sqrt, Floor, Pow, Sin, Cos y PI.
Con estas funciones básicas, se construye por ejemplo la aproximación de la integral para calcular la distribución normal acumulativa,
y se calcula con la función Gamma:
/// <summary>
/// Gets the cumulative normal distribution function.
/// </summary>
public double ValueOf(double x)
{
x = (x - mean) / (Math.Sqrt(2) * sigma);
double erf = 0.0;
if(x != 0.0)
{
if(double.IsPositiveInfinity(x))
{
erf = 1.0;
}
else if(double.IsNegativeInfinity(x))
{
erf = -1.0;
}
else
{
if(x >= 0.0)
{
erf = IncompleteGamma(0.5, x*x);
}
else
{
erf = - IncompleteGamma(0.5, x*x);
}
}
}
return (erf + 1.0) / 2.0;
}
// Incomplete Gamma Function P(a,x) = integral from zero to x of (exp(-t)t^(a-1))dt
private static double IncompleteGamma(double a, double x)
{
Debug.Assert(a >= 0.0 && x >= 0.0);
double igf = 0.0;
if(x < a + 1.0)
{
// Series representation
igf = IncompleteGammaSer(a, x);
}
else
{
// Continued fraction representation
igf = IncompleteGammaFract(a, x);
}
return igf;
}
// Incomplete Gamma Function P(a,x) = integral from zero to x of (exp(-t)t^(a-1))dt
// Series representation of the function - valid for x < a + 1
private static double IncompleteGammaSer(double a, double x)
{
Debug.Assert(a >= 0.0 && x >= 0.0);
Debug.Assert(x < a + 1.0, "#E00 Continued Fraction Representation.");
int i = 0;
double igf = 0.0D;
bool check = true;
double acopy = a;
double sum = 1.0 / a;
double incr = sum;
double loggamma = LogGamma(a);
while(check)
{
++i;
++a;
incr *= x/a;
sum += incr;
if(Math.Abs(incr) < Math.Abs(sum) * igfeps)
{
igf = sum * Math.Exp(-x + acopy * Math.Log(x)- loggamma);
check = false;
}
if(i >= igfiter)
{
check = false;
igf = sum * Math.Exp(-x + acopy * Math.Log(x)- loggamma);
}
}
return igf;
}
Para otras funciones como la binomial, es más fácil, ya que
Pb(r/n; p) = ( n ) r n-r
( p ) p (1 -p)
Pb es la probabilidad binomial, de r éxitos dada una muestra de n, y una probabilidad p.
(n)
(P) es un número combinatorio
r
p es p elevado a la r
n-r
(1-p) es (1-p) elevado a n-r.
Mirá los códigos un ratito y vas a ver que son cálculos muy sencillos y que sirven para resuelver problemas estadísticos complejos.