能否提供一份C语言实现最小二乘法线性回归的代码示例?
时间: 2024-11-03 11:13:36 浏览: 41
当然可以。最小二乘法是一种常用的线性回归算法,用于估计因变量与自变量之间的线性关系。以下是简单的C语言实现最小二乘法线性回归的代码示例:
```c
#include <stdio.h>
#include <math.h>
// 计算x的平方
double square(double x) {
return x * x;
}
// 求解最小二乘法线性回归参数
void linear_regression(double x[], double y[], int n, double *m, double *b) {
*m = (n * sum_product(x, y) - sum(x) * sum(y)) / (n * sum_square(x) - square(sum(x)));
*b = (sum(y) - (*m) * sum(x)) / n;
}
// 辅助函数,计算数组元素之和
double sum(double arr[], int size) {
double total = 0;
for (int i = 0; i < size; i++) {
total += arr[i];
}
return total;
}
// 辅助函数,计算两个数组元素的乘积和
double sum_product(double x[], double y[], int size) {
double product = 0;
for (int i = 0; i < size; i++) {
product += x[i] * y[i];
}
return product;
}
// 主函数
int main() {
double x[] = {1, 2, 3, 4, 5};
double y[] = {2, 3, 4, 5, 6}; // 假设我们有自变量和因变量的数据
int n = sizeof(x) / sizeof(x[0]);
double m, b;
linear_regression(x, y, n, &m, &b);
printf("斜率 (m): %.2f\n", m);
printf("截距 (b): %.2f\n", b);
return 0;
}
```
这个程序首先定义了一些辅助函数来计算数组的和、乘积和以及平方,然后实现了`linear_regression`函数来求解线性回归的斜率和截距。在`main`函数中,我们提供了示例数据并打印出拟合的结果。
阅读全文