编辑代码

#include <stdio.h>  
  
// 函数用于计算最佳拟合直线的系数  
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;  
}