c语言最小二乘法代码
时间: 2024-11-28 09:14:37 浏览: 30
最小二乘法是一种常用的数据拟合技术,在C语言中可以使用基本数学运算和循环结构来实现。下面是一个简单的例子,展示了如何使用最小二乘法求解线性回归问题,即找到一条直线y = mx + b来近似一组给定的(x, y)数据点:
```c
#include <stdio.h>
#include <math.h>
// 定义函数,用于计算直线的斜率和截距
void least_squares_fit(double x[], double y[], int n, double *m, double *b) {
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x_squared = 0;
for (int i = 0; i < n; i++) {
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_x_squared += pow(x[i], 2);
}
*m = (n * sum_xy - sum_x * sum_y) / (n * sum_x_squared - pow(sum_x, 2));
*b = (sum_y - (*m) * sum_x) / n;
}
int main() {
// 假设我们有5组数据
double x[] = {1, 2, 3, 4, 5};
double y[] = {2, 4, 6, 8, 10};
// 初始化结果变量
double m, b;
// 调用函数求解最小二乘线性回归
least_squares_fit(x, y, 5, &m, &b);
printf("y = %.2fx + %.2f\n", m, b); // 输出拟合后的直线方程
return 0;
}
```
这个程序首先计算x和y的均值以及xy积的总和,然后根据公式计算斜率m和截距b。运行这段代码,你会得到一组数据点的最佳拟合直线。
阅读全文