写一个线性拟合的c语言代码
时间: 2024-02-11 07:03:38 浏览: 18
以下是一个简单的使用最小二乘法进行线性拟合的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int n, i;
double *x, *y;
double sum_x = 0.0, sum_y = 0.0, sum_xy = 0.0, sum_xx = 0.0;
double slope, intercept;
printf("请输入数据点的数量:");
scanf("%d", &n);
// 动态分配内存空间
x = (double*)malloc(n * sizeof(double));
y = (double*)malloc(n * sizeof(double));
// 读入数据
printf("请输入数据点的 x 和 y 值:\n");
for (i = 0; i < n; i++) {
scanf("%lf %lf", &x[i], &y[i]);
sum_x += x[i];
sum_y += y[i];
sum_xx += x[i] * x[i];
sum_xy += x[i] * y[i];
}
// 计算斜率和截距
slope = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x * sum_x);
intercept = (sum_y - slope * sum_x) / n;
// 打印结果
printf("最小二乘法线性拟合结果为:y = %.2fx + %.2f\n", slope, intercept);
// 释放内存空间
free(x);
free(y);
return 0;
}
```
该代码读入了数据点数量和每个数据点的 x 和 y 值,然后使用最小二乘法计算出斜率和截距,最后输出线性方程的结果。注意,这里假设数据点的分布是线性的。如果数据点的分布不是线性的,那么线性拟合的结果可能不准确。