distribucion normal
Hola,alguien tendria ya implementado la distribucion normal estandar inversa (0,1)...
Oigan, me sirvio mucho el algoritmo. Pero no tienen el que es para hallar la distribucion normal estandar (no la inversa).
Estoy buscando el algoritmo pero no lo encuentro por ningun sitio.
Saludos
Estoy buscando el algoritmo pero no lo encuentro por ningun sitio.
Saludos
hola, yo tambien necesito la codificaci贸n de la distribuci贸n estandar inversa, as铆 que por favor, si te la hacen llegar, reenviamela vale?
mis correos son:
[email protected]
[email protected]
muchisimas gracias de antemano
mis correos son:
[email protected]
[email protected]
muchisimas gracias de antemano
Hola janchaz. Antes de nada, para ver bien el contenido de este mensaje, selecionalo todo y pegalo en el bloc de notas
asegurandote que no est谩 puesto el juste de linea (Formato->Ajuste de linea).
Buscando alg煤n algoritmo m谩s eficaz que el que yo he implementado me he encontrado contigo. As铆
que te paso la funci贸n que he hecho, funciona bien, pero estaba buscando alg煤n otro algoritmo que fuese m谩s r谩pido.
/***************************************************************************************************************************/
// DEFINICION
// ----------
//
float NormalInversaEstandar(float p, long double dx=0.00001);
//
// p.- es la probabilidad para la que se quiere determinar el valor de Z
// dx.- es la resoluci贸n del c谩lculo de Z, a mayor resoluci贸n mayor exactidtud pero mayor tiempo para el c谩lculo.
// Este argumento esta puesto por defecto, con lo que no es necesario pasarse lo a la funci贸n a no ser que queramos
// otro diferente.
// Ej: determinar Z para una probabilidad normal de 1-alfa de 0.975 -> NormalInversaEstandar(0.975)
// determinar Z para una probabilidad normal de 1-alfa de 0.975 con una resolucion de 0.01-> NormalInversaEstandar(0.975, 0.01)
//
/***************************************************************************************************************************/
// DECLARACION
// -----------
float NormalInversaEstandar(float p, long double dx) // p es la probabilidad dada para una Z (buscada, es la que devuelve esta funci贸n), "dx" es la resoluci贸n con la que queremos que se realice el c谩lculo, a mas resoluci贸n m谩s lento ser谩 el mismo
{
long double PI = 3.141592653589793238462643382795; // constante PI
long double K; // K Contendr谩 la inversa de la raiz cuadrada de 2*PI
K=(long double)(1)/sqrtl(2*PI); // aqu铆 se hace
long double suma=0;
long double i = 0; // "i" contendr谩 la Z buscada
long double p_debajo50; //"p_debajo50" contendr谩 la probabilidad equivalente para una misma Z en valor absoluto (en las 煤ltimas lineas se corrige el signo)
if(dx > 0.1 || dx < 0) dx=0.00001; //si el valor pasado como resoluci贸n es errone, se corrige
if(p<=1 && p >0) //si la probabilidad pasada a la funci贸n es menor o igual que 0 y mayor que 1 (la probabilidad solo puede estar entre 0 y 1), la funcion devuelve 0 (esto se hace en la ultima linea de la funci贸n)
{
if(p<0.5)
p_debajo50 = 0.5-p;
else
p_debajo50 = p-0.5; //en esta, y en las dos lineas anteriores, se determina la probabilidad para la z (en valor absoluto) que es equivalente para la probabilidad dada
while(K*suma<=p_debajo50)
{
suma=suma+(expl(-powl(i,2)/2)*dx);
i=i+dx;
} //en este bucle while se calcula Z en valor absoluto
if(p<0.5)
return -i;
else
return i; //en esta linea y en las 3 anteriores se corrige el signo de Z al verdadero correspondiente a la probabilidad solicitada
}
else return 0; //si la probabilidad pasada a esta funci贸n es mayor a 1 o menor a 0, la funci贸n retorna un 0 indicando que se ha ocurrido esta situaci贸n
}
/***************************************************************************************************************************/
Esta funci贸n te calcula Z para una probabilidad tomada a partir de -infinito (cola inferior). Tal vez desees conocer +/-Z para
una probabilidad que est茅 centrada en la curva. Para ello puedes implementar la siguiente funci贸n:
float NormalIntervaloConfianza2Colas(float nc, long double dx) //nc es la probabilidad centrada (nc es de nivel de confianza), y dx es para la resolucion del c谩lculo
{
if(nc<=1 && nc >0)return NolmalInversaEstandar( nc + ((1-nc)/2), dx);
else return 0;
}
Si realizas alguna modificaci贸n que mejore la funci贸n te agradeceria que me la pasases.
Espero que te sirva.
Jorge Celso.
