Saltar al contenido

Cálculo de la desviación estándar y la varianza en C++

Mantén la atención ya que en esta sección vas a hallar el resultado que buscas.Este enunciado fue evaluado por nuestros expertos para asegurar la calidad y exactitud de nuestro post.

Solución:

Como sugiere correctamente la otra respuesta de herradura, tendrá que usar un bucle para calcular la varianza, de lo contrario, la declaración

var = ((matriz[n] – media) * (matriz[n] – media)) / numPuntos;

solo considerará un solo elemento del array.

Acabo de mejorar el código sugerido de herradura:

var = 0;
for( n = 0; n < numPoints; n++ )

  var += (Array[n] - mean) * (Array[n] - mean);

var /= numPoints;
sd = sqrt(var);

Su suma funciona bien incluso sin usar bucle porque está usando acumular función que ya tiene un bucle dentro, pero que no es evidente en el código, eche un vistazo al comportamiento equivalente de acumular para una comprensión clara de lo que está haciendo.

Nota:X ?= Y es corto para X = X ? Y dónde ? puede ser cualquier operador. También puedes usar pow(Array[n] - mean, 2) tomar el cuadrado en lugar de multiplicarlo por sí mismo haciéndolo más ordenado.

Aquí hay otro enfoque usando std::accumulate pero sin usar pow. Además, podemos usar una función anónima para definir cómo calcular la varianza después de calcular la media. Tenga en cuenta que esto calcula la varianza de muestra imparcial.

#include 
#include 
#include 

template
T variance(const std::vector &vec) 
    const size_t sz = vec.size();
    if (sz == 1) 
        return 0.0;
    

    // Calculate the mean
    const T mean = std::accumulate(vec.begin(), vec.end(), 0.0) / sz;

    // Now calculate the variance
    auto variance_func = [&mean, &sz](T accumulator, const T& val) 
        return accumulator + ((val - mean)*(val - mean) / (sz - 1));
    ;

    return std::accumulate(vec.begin(), vec.end(), 0.0, variance_func);

Un ejemplo de cómo usar esta función:

#include 
int main() 
    const std::vector vec = 1.0, 5.0, 6.0, 3.0, 4.5;
    std::cout << variance(vec) << std::endl;

Comentarios y calificaciones

Si piensas que te ha resultado de utilidad nuestro post, agradeceríamos que lo compartas con otros juniors y nos ayudes a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *