最小二乘法 c++代码实现
时间: 2023-10-21 15:17:26 浏览: 145
用C++实现的最小二乘法
4星 · 用户满意度95%
以下是最小二乘法的 C 代码实现:
```c
#include <stdio.h>
// 求最小二乘法拟合直线的斜率和截距
void linear_regression(float *x, float *y, int n, float *slope, float *intercept) {
float sum_x = 0, sum_y = 0, sum_xy = 0, sum_xx = 0;
for (int i = 0; i < n; i++) {
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_xx += x[i] * x[i];
}
*slope = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x * sum_x);
*intercept = (sum_y - *slope * sum_x) / n;
}
int main() {
float x[5] = {1, 2, 3, 4, 5};
float y[5] = {2, 4, 5, 4, 5};
float slope, intercept;
linear_regression(x, y, 5, &slope, &intercept);
printf("斜率:%.2f,截距:%.2f\n", slope, intercept);
return 0;
}
```
这段代码用于求解拟合直线的斜率和截距。其中,`x` 和 `y` 分别是已知数据点的横坐标和纵坐标,`n` 是数据点的个数,`slope` 和 `intercept` 分别是拟合直线的斜率和截距。函数的实现过程中,首先计算出各种和,然后根据最小二乘法的公式求解斜率和截距。最后,将结果保存在 `slope` 和 `intercept` 中返回。在 `main` 函数中,我们将已知数据点的横坐标和纵坐标传递给 `linear_regression` 函数进行计算,并将结果打印输出。
阅读全文