// 函数用于计算最佳拟合直线的系数
void leastSquares(double x[], double y[], int n, double *a, double *b) {
double sumX = 0, sumY = 0, sumXY = 0, sumXX = 0;
int i;
for (i = 0; i < n; i++) {
sumX += x[i];
sumY += y[i];
sumXY += x[i] * y[i];
sumXX += x[i] * x[i];
}
double denominator = n * sumXX - sumX * sumX;
if (denominator == 0) {
// 分母为零,无法计算
*a = 0;
*b = 0;
return;
}
*a = (n * sumXY - sumX * sumY) / denominator;
*b = (sumY - *a * sumX) / n;
}
int main() {
// 使用您提供的数据点
double x[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
double y[] = {0.1509, 0.6527, 1.1515, 1.6485, 2.1553, 2.6489, 3.1476, 3.6443, 4.1528, 4.6464, 5.155, 5.6462, 6.1528, 6.6394, 7.1537, 7.6548, 8.1533, 8.6671, 9.1385, 9.6431};
int n = 20; // 数据点的数量
double a, b;
leastSquares(x, y, n, &a, &b);
printf("最佳拟合直线的方程为: y = %fx + %f\n", a, b);
return 0;
}