Foro de elhacker.net

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
  1. double calcularDesviacion (int serie[])
  2. {
  3.  double sumatorio = 0;
  4.  double sumatorio2 = 0;
  5.  double promedio = 0;
  6.  double desviacion = 0;
  7.  int t;
  8.  
  9.  for ( t=0; t < MAXTIRADAS; t++ )
  10.  {
  11.    sumatorio += serie[ t ];
  12.    sumatorio2 += pow( serie[ t ], 2 );
  13.  }
  14.  
  15.  promedio = sumatorio / MAXTIRADAS;
  16.  double desviacion2 = sumatorio2 / MAXTIRADAS - pow( promedio, 2 );
  17.  desviacion = sqrt( desviacion2 );
  18.  return desviacion;
  19. }

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 :)