c语言最小二乘法公式代码
时间: 2024-11-24 11:27:24 浏览: 16
最小二乘法是一种常用的数值分析方法,用于拟合数据点并找到最佳函数来近似这些数据。在C语言中,你可以使用基本的数学运算和循环结构来实现线性回归的最小二乘法。以下是简单的二维线性回归的代码示例:
```c
#include <stdio.h>
#include <math.h>
// 定义线性回归函数
double linear_regression(double a, double b, double x) {
return a * x + b;
}
// 残差平方和计算
double sum_of_squares(double predictions[], double actuals[], int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += pow(predictions[i] - actuals[i], 2);
}
return sum;
}
// 最小二乘法求解参数a和b
void least_square_fit(double x[], double y[], double *a, double *b, int n) {
*a = (n * dot_product(x, y) - sum_product(x)) / (n * dot_product(x, x) - square_sum(x));
*b = (sum_product(y) - dot_product(a, x)) / n;
}
// 辅助函数
double dot_product(double v1[], double v2[], int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += v1[i] * v2[i];
}
return sum;
}
double square_sum(double v[], int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += pow(v[i], 2);
}
return sum;
}
int main() {
// 假设你有x[]和y[]数组,包含输入数据和对应的y值
double x[] = {1, 2, 3, 4, 5};
double y[] = {2, 3, 4, 5, 6};
// 初始化待求解的参数
double a, b;
// 调用最小二乘法求解
least_square_fit(x, y, &a, &b, sizeof(x) / sizeof(x[0]));
// 打印结果
printf("线性回归方程: y = %.2fx + %.2f\n", a, b);
return 0;
}
```
这个代码实现了最小二乘法的基本算法,它通过优化残差平方和来找到最接近真实数据的直线。注意,对于复杂的模型,可能需要更高级的库来进行计算。
阅读全文