Вычисление стандартного отклонения на языке C

CBeginner
Практиковаться сейчас

Введение

В этом лабораторном занятии вы научитесь вычислять стандартное отклонение набора данных на языке программирования C. В рамках лабораторной работы рассматриваются три основные стадии: вычисление среднего значения набора данных, суммирование квадратов отклонений от среднего для вычисления дисперсии и затем извлечение квадратного корня для получения стандартного отклонения. По завершении этого лабораторного занятия вы будете хорошо понимать эти фундаментальные статистические концепции и способ реализации их на языке C.

В лабораторной работе приведены пошаговые инструкции и примеры кода, которые помогут вам пройти весь процесс. Вы начнете с написания программы на языке C для вычисления среднего значения заданного набора данных, а затем расширите программу для вычисления дисперсии путем суммирования квадратов отклонений от среднего. Наконец, вы извлечете квадратный корень из дисперсии, чтобы определить стандартное отклонение, и выведете результат.

Вычисление среднего значения набора данных

На этом этапе вы научитесь вычислять среднее значение набора данных на языке программирования C. Среднее значение - это фундаментальная статистическая мера, представляющая среднее значение набора чисел.

Сначала создадим программу на языке C для вычисления среднего значения набора данных. Откройте новый файл с помощью nano:

cd ~/project
nano mean_calculation.c

Теперь введите следующий код:

#include <stdio.h>

#define MAX_SIZE 100

float calculateMean(int arr[], int size) {
    float sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum / size;
}

int main() {
    int dataset[MAX_SIZE];
    int size;

    printf("Enter the number of elements (max %d): ", MAX_SIZE);
    scanf("%d", &size);

    printf("Enter %d integers:\n", size);
    for (int i = 0; i < size; i++) {
        scanf("%d", &dataset[i]);
    }

    float mean = calculateMean(dataset, size);
    printf("Mean of the dataset: %.2f\n", mean);

    return 0;
}

Скомпилируйте программу:

gcc mean_calculation.c -o mean_calculation

Запустите программу и введите некоторые примеры данных:

./mean_calculation

Пример вывода:

Enter the number of elements (max 100): 5
Enter 5 integers:
10
20
30
40
50
Mean of the dataset: 30.00

Разберем код:

  1. Мы определяем функцию calculateMean, которая принимает массив и его размер в качестве параметров.
  2. Функция вычисляет сумму всех элементов массива.
  3. Среднее значение вычисляется путем деления суммы на общее количество элементов.
  4. В функции main мы просим пользователя ввести набор данных.
  5. Мы вызываем функцию calculateMean и выводим результат с двумя знаками после запятой.

Суммирование квадратов отклонений и вычисление дисперсии

На этом этапе вы расширите предыдущую программу для вычисления дисперсии путем суммирования квадратов отклонений от среднего значения. Дисперсия измеряет, насколько разбросаны числа в наборе данных.

Откройте предыдущий файл для изменения:

cd ~/project
nano mean_calculation.c

Обновите программу с добавлением вычисления дисперсии:

#include <stdio.h>
#include <math.h>

#define MAX_SIZE 100

float calculateMean(int arr[], int size) {
    float sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum / size;
}

float calculateVariance(int arr[], int size, float mean) {
    float sumSquaredDeviations = 0;
    for (int i = 0; i < size; i++) {
        float deviation = arr[i] - mean;
        sumSquaredDeviations += deviation * deviation;
    }
    return sumSquaredDeviations / size;
}

int main() {
    int dataset[MAX_SIZE];
    int size;

    printf("Enter the number of elements (max %d): ", MAX_SIZE);
    scanf("%d", &size);

    printf("Enter %d integers:\n", size);
    for (int i = 0; i < size; i++) {
        scanf("%d", &dataset[i]);
    }

    float mean = calculateMean(dataset, size);
    float variance = calculateVariance(dataset, size, mean);

    printf("Mean of the dataset: %.2f\n", mean);
    printf("Variance of the dataset: %.2f\n", variance);

    return 0;
}

Скомпилируйте обновленную программу:

gcc mean_calculation.c -o mean_calculation -lm

Запустите программу и введите пример данных:

./mean_calculation

Пример вывода:

Enter the number of elements (max 100): 5
Enter 5 integers:
10
20
30
40
50
Mean of the dataset: 30.00
Variance of the dataset: 200.00

Основные моменты в коде:

  1. Мы добавили новую функцию calculateVariance, которая принимает массив, размер и среднее значение.
  2. Функция вычисляет отклонение каждого элемента от среднего значения.
  3. Она возводит эти отклонения в квадрат и суммирует их.
  4. Дисперсия вычисляется путем деления суммы квадратов отклонений на количество элементов.
  5. При компиляции мы используем флаг -lm для подключения математической библиотеки.

Извлечение квадратного корня для вычисления стандартного отклонения и вывод результата

На этом последнем этапе вы завершите вычисление стандартного отклонения, извлекая квадратный корень из дисперсии. Стандартное отклонение является ключевой мерой разброса данных в статистическом анализе.

Откройте предыдущий файл для изменения:

cd ~/project
nano mean_calculation.c

Обновите программу с добавлением вычисления стандартного отклонения:

#include <stdio.h>
#include <math.h>

#define MAX_SIZE 100

float calculateMean(int arr[], int size) {
    float sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum / size;
}

float calculateVariance(int arr[], int size, float mean) {
    float sumSquaredDeviations = 0;
    for (int i = 0; i < size; i++) {
        float deviation = arr[i] - mean;
        sumSquaredDeviations += deviation * deviation;
    }
    return sumSquaredDeviations / size;
}

float calculateStandardDeviation(float variance) {
    return sqrt(variance);
}

int main() {
    int dataset[MAX_SIZE];
    int size;

    printf("Enter the number of elements (max %d): ", MAX_SIZE);
    scanf("%d", &size);

    printf("Enter %d integers:\n", size);
    for (int i = 0; i < size; i++) {
        scanf("%d", &dataset[i]);
    }

    float mean = calculateMean(dataset, size);
    float variance = calculateVariance(dataset, size, mean);
    float standardDeviation = calculateStandardDeviation(variance);

    printf("Dataset Statistics:\n");
    printf("Mean: %.2f\n", mean);
    printf("Variance: %.2f\n", variance);
    printf("Standard Deviation: %.2f\n", standardDeviation);

    return 0;
}

Скомпилируйте обновленную программу:

gcc mean_calculation.c -o mean_calculation -lm

Запустите программу и введите пример данных:

./mean_calculation

Пример вывода:

Enter the number of elements (max 100): 5
Enter 5 integers:
10
20
30
40
50
Dataset Statistics:
Mean: 30.00
Variance: 200.00
Standard Deviation: 14.14

Основные моменты в коде:

  1. Мы добавили новую функцию calculateStandardDeviation.
  2. Эта функция использует функцию sqrt() из математической библиотеки для вычисления стандартного отклонения.
  3. Стандартное отклонение является квадратным корнем из дисперсии.
  4. Теперь главная функция выводит все три статистические меры.
  5. Мы продолжаем использовать флаг -lm для подключения математической библиотеки.

Резюме

В этом лабораторном занятии вы сначала научились вычислять среднее значение набора данных на языке программирования C. Среднее значение - это фундаментальная статистическая мера, представляющая среднее значение набора чисел. Затем вы расширили программу для вычисления дисперсии путем суммирования квадратов отклонений от среднего. Дисперсия измеряет, насколько разбросаны числа в наборе данных. Наконец, вы научились извлекать квадратный корень из дисперсии для вычисления стандартного отклонения и выводить результат.