Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: TheEFDR en 13 Noviembre 2014, 17:18 PM

Título: Error al calcular la varianza.
Publicado por: TheEFDR en 13 Noviembre 2014, 17:18 PM
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.
Título: Re: Error al calcular la varianza.
Publicado por: eferion en 13 Noviembre 2014, 17:33 PM
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".
Título: Re: Error al calcular la varianza.
Publicado por: TheEFDR en 13 Noviembre 2014, 17:53 PM
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.
Título: Re: Error al calcular la varianza.
Publicado por: eferion en 13 Noviembre 2014, 18:09 PM
varianza (wikipedia) (http://es.wikipedia.org/wiki/Varianza)

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
Título: Re: Error al calcular la varianza.
Publicado por: TheEFDR en 13 Noviembre 2014, 18:28 PM
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
Título: Re: Error al calcular la varianza.
Publicado por: eferion en 13 Noviembre 2014, 18:31 PM
de nada hombre.

suerte con tu proyecto :)