Oppure

Loading
11/08/10 21:20
systemgvp
salve,

vorrei sapere se esiste in C# (.net 4) la funzione statistica di distribuzione normale che in Excel viene usata come:

DISTRIB.NORM(x;media;deviazione;cumulativo)
DISTRIB.NORM(10;15;4;1)=0,11

e anche l'inversa

INV.NORM(probabilità;media;deviazione)
INV.NORM(0,2;15;4)=12
aaa
12/08/10 7:53
Il Totem
No. Devi scrivertela tu:
Dim DistribNorm = Function(x, m, d) Math.E ^ ((x - m)^2 / (-2d^2)) / (Math.Sqrt(2 * Math.PI) * d)
aaa
12/08/10 14:04
systemgvp
la formulazione che hai scritto non va bene perchè fornisce il valore esatto solo nel caso in cui il cumulativo vale false, mentre se vale true , che è quello che serve a me, rappresenta l'integrale di questa funzione da meno infinito a "X".

Come posso fare quindi un'integrale?
aaa
12/08/10 20:54
systemgvp
pre la distribuzione normale ho risolto con:

class Integrale
{
public delegate double Function(double x);
//declare a delegate that takes and returns double
public static double integral(Function f, double a, double b, int step_number)
{
double sum = 0;
double step_size = (b - a) / step_number;
for (int i = 0; i < step_number; i = i + 2)
{ //Simpson algorithm samples the integrand in several point which significantly improves //precision.
sum = sum + (f(a + i * step_size) + 4 * f(a + (i + 1) * step_size) + f(a + (i + 2) * step_size)) * step_size / 3;
//divide the area under f(x) //into step_number rectangles and sum their areas
}
return sum;
}
}

//....................

public static double funzione(double x)
{
double d = 4;
double m = 15;
return Math.Exp(-1*Math.Pow(x-m,2)/(2*d*d))/Math.Sqrt(2*Math.PI*d*d);

}

e sull'evento:

Console.WriteLine(Integrale.integral(new Integrale.Function(funzione), 0, 10, 200));


Mentre per l'inversa normale non riesco nemmeno a trovare la formulazione!
aaa