Как вы вычисляете дисперсию, медианное и стандартное отклонение в С++ или Java?

Возможный дубликат:
Простая статистика - пакеты Java для расчета среднего, стандартного отклонения и т.д.

У меня есть вектор некоторых удвоений (1.1,2,3,5). Как я могу рассчитать дисперсию, медианное и стандартное отклонение?

Будет выполняться Java или С++ или даже псевдокод.

Ответ 1

public class Statistics {
    double[] data;
    int size;   

    public Statistics(double[] data) {
        this.data = data;
        size = data.length;
    }   

    double getMean() {
        double sum = 0.0;
        for(double a : data)
            sum += a;
        return sum/size;
    }

    double getVariance() {
        double mean = getMean();
        double temp = 0;
        for(double a :data)
            temp += (a-mean)*(a-mean);
        return temp/(size-1);
    }

    double getStdDev() {
        return Math.sqrt(getVariance());
    }

    public double median() {
       Arrays.sort(data);

       if (data.length % 2 == 0) {
          return (data[(data.length / 2) - 1] + data[data.length / 2]) / 2.0;
       } 
       return data[data.length / 2];
    }
}

Ответ 2

Чтобы вычислить среднее значение, пронумеруйте список/массив чисел, отслеживая частичные суммы и длину. Затем верните sum/length.

double sum = 0.0;
int length = 0;

for( double number : numbers ) {
    sum += number;
    length++;
}

return sum/length;

Отклонение рассчитывается аналогичным образом. Стандартное отклонение - это просто квадратный корень дисперсии:

double stddev = Math.sqrt( variance );