编辑代码

#include <stdio.h>

// 最小二乘法函数
void leastSquares(int n, double x[], double y[], double *m, double *b) {
    double sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;

    for (int i = 0; i < n; i++) {
        sumX += x[i];
        sumY += y[i];
        sumXY += x[i] * y[i];
        sumX2 += x[i] * x[i];
    }

    *m = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);
    *b = (sumY - *m * 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.150723,0.650662,1.150601,1.65054,2.150479,2.650418,3.150357,3.650296,4.150235,4.650174,5.150113,5.650052,6.149991,6.64993,7.149869,7.649808,8.149747,8.649686,9.149625,9.649564};
    int n = 20;
    double m, b;

    leastSquares(n, x, y, &m, &b);

    printf("拟合直线方程为: y = %fx + %f\n", m, b);

    return 0;
}