Error al calcular la varianza.

Iniciado por TheEFDR, 13 Noviembre 2014, 17:18 PM

0 Miembros y 1 Visitante están viendo este tema.

TheEFDR

Hola buenas os .comento:
Mi funcion para calcular la varianza es asi:

double calcularDesviacion (int serie[])
   {
      double sumatorio;
      double promedio;
      double desviacion;
      int t;
      
      sumatorio=0;
      t=0;
      do
      {
         sumatorio=sumatorio+serie[t];
         t++;
      }while (t<MAXTIRADAS);
      promedio=(1.0*sumatorio)/MAXTIRADAS;
      desviacion=sqrt(sumatorio*1.0/MAXTIRADAS-pow(promedio,2));
      return desviacion;
        }
Esta metida dentro de un codigo principal pero no me da ningun error al compilar.
El problema es que no me da resultado. En mi programa aparece: "La desviacion tipica de la serie de numeros es -1.#IO"
Sabeis que es eso y por que aparece?
Muchas gracias de antemano.

P.D: Estoy empezando en este mundo asi que espero que no os metais mucho conmigo.

eferion

1 * X = X, luego (1.0*sumatorio) = sumatorio. No hace falta complicar las ecuaciones de forma gratuita.

Si el promedio se calcula como media(x)=sum(xi)/N, la desviación se calcula como sum( (xi-media(x))?2 ). En tu caso, tu cálculo es "media(x)-media(x)^2".

TheEFDR

Lo siento pero no entiendo lo que me dices.

Cual es la formula exacta de la varianza? Es que por mas que la busco e intento aplicarla no me sale.

eferion

#3
varianza (wikipedia)

N -> Número de muestras
media(x) = sum( x[ i ] ) / N
varianza2 = sum( pow(x[ i ] - media(x), 2) ) / N = sum( pow( x[ i ], 2 ) ) / N - pow( media(x), 2 )
varianza = sqrt( varianza2 )

Código (cpp) [Seleccionar]

double calcularDesviacion (int serie[])
{
 double sumatorio = 0;
  double sumatorio2 = 0;
 double promedio = 0;
 double desviacion = 0;
 int t;
     
 for ( t=0; t < MAXTIRADAS; t++ )
  {
   sumatorio += serie[ t ];
    sumatorio2 += pow( serie[ t ], 2 );
 }

 promedio = sumatorio / MAXTIRADAS;
 double desviacion2 = sumatorio2 / MAXTIRADAS - pow( promedio, 2 );
 desviacion = sqrt( desviacion2 );
 return desviacion;
}


EDITO: He corregido la ecuación. Espero que no tenga más fallos

TheEFDR

Muchisimas gracias de verdad!!
No he copiado tu codigo porque hay cosas que aun no hago asi o no entiendo, pero me ha servido para aclararme y ver que hacia mal.
Otra vez mas: MUCHAS GRACIAS

eferion

de nada hombre.

suerte con tu proyecto :)