Đề bài
Viết chương trình triển khai thuật toán hồi quy tuyến tính. Người dùng nhập số lượng giá trị.
Giải pháp
Hồi quy tuyến tính tìm mối quan hệ giữa hai biến bằng phương trình tuyến tính: y = mx + c.
Công thức tính m (hệ số góc) và c (điểm cắt):
d = n*sumxsq - sumx*sumx; m = (n*sumxy - sumx*sumy) / d; c = (sumy*sumxsq - sumx*sumxy) / d;
Chương trình C
#include <math.h>
#include <stdio.h>
main() {
int n, i;
float x, y, m, c, d;
float sumx = 0, sumxsq = 0, sumy = 0, sumxy = 0;
printf("Nhập số lượng giá trị n: ");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("Nhập x và y: ");
scanf("%f%f", &x, &y);
sumx += x;
sumxsq += x * x;
sumy += y;
sumxy += x * y;
}
d = n * sumxsq - sumx * sumx;
m = (n * sumxy - sumx * sumy) / d;
c = (sumy * sumxsq - sumx * sumxy) / d;
printf("M=%f\tC=%f\n", m, c);
}
Kết quả
Nhập số lượng giá trị n: 5 Nhập x và y: 1 5 Nhập x và y: 2 6 Nhập x và y: 2 4 Nhập x và y: 3 7 Nhập x và y: 1 1 M=2.000000 C=1.000000