Вычисление сумм и использование формулы для корреляции
На этом шаге мы расширим предыдущую программу, чтобы вычислить необходимые суммы для расчета коэффициента корреляции Пирсона. Мы изменим файл correlation_input.c, чтобы включить вычисления по формуле корреляции.
Откройте предыдущий файл:
cd ~/project
nano correlation_input.c
Обновите код следующим реализацией:
#include <stdio.h>
#include <math.h>
#define MAX_POINTS 100
double calculatePearsonCorrelation(double x[], double y[], int n) {
double sum_x = 0, sum_y = 0, sum_xy = 0;
double sum_x_squared = 0, sum_y_squared = 0;
// Вычисление необходимых сумм
for (int i = 0; i < n; i++) {
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_x_squared += x[i] * x[i];
sum_y_squared += y[i] * y[i];
}
// Формула коэффициента корреляции Пирсона
double numerator = n * sum_xy - sum_x * sum_y;
double denominator = sqrt((n * sum_x_squared - sum_x * sum_x) *
(n * sum_y_squared - sum_y * sum_y));
return numerator / denominator;
}
int main() {
double x[MAX_POINTS], y[MAX_POINTS];
int n, i;
printf("Enter the number of data points (max %d): ", MAX_POINTS);
scanf("%d", &n);
printf("Enter x and y coordinates:\n");
for (i = 0; i < n; i++) {
printf("Point %d (x y): ", i + 1);
scanf("%lf %lf", &x[i], &y[i]);
}
double correlation = calculatePearsonCorrelation(x, y, n);
printf("\nData Points Entered:\n");
for (i = 0; i < n; i++) {
printf("Point %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
}
printf("\nКоэффициент корреляции Пирсона: %.4f\n", correlation);
return 0;
}
Компилируем программу с библиотекой математических функций:
gcc -o correlation_input correlation_input.c -lm
Запускаем программу с тестовыми данными:
./correlation_input
Пример вывода:
Enter the number of data points (max 100): 5
Enter x and y coordinates:
... (остальной вывод)
Ключевые моменты расчета коэффициента корреляции Пирсона:
- Мы вычисляем необходимые суммы: x, y, xy, x², y²
- Применяем формулу коэффициента корреляции Пирсона
- Используем sqrt() из math.h для вычислений
- Возвращаем коэффициент корреляции в диапазоне от -1 до 1