// 最小二乘法函数
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;
}