p = polyfit(x,y,1)转C语言 不要用GSL库
时间: 2024-04-15 11:27:52 浏览: 10
如果你不想使用第三方库,可以通过最小二乘法进行线性拟合的自定义实现。下面是一个简单的示例代码:
```c
#include <stdio.h>
#define N 5 // 数据点个数
void polyfit(double x[], double y[], int n, double* slope, double* intercept) {
double 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];
}
double x_mean = sum_x / n;
double y_mean = sum_y / n;
*slope = (sum_xy - n * x_mean * y_mean) / (sum_xx - n * x_mean * x_mean);
*intercept = y_mean - (*slope) * x_mean;
}
int main() {
double x[N] = {1, 2, 3, 4, 5}; // 自变量 X 的数据
double y[N] = {2, 3, 5, 6, 8}; // 因变量 Y 的数据
double slope, intercept; // 存储拟合结果的斜率和截距
polyfit(x, y, N, &slope, &intercept); // 进行线性拟合
printf("拟合结果:\n");
printf("斜率 p[1] = %g\n", slope); // 输出斜率
printf("截距 p[0] = %g\n", intercept); // 输出截距
return 0;
}
```
这个示例代码定义了一个 `polyfit` 函数,通过最小二乘法进行线性拟合。在 `main` 函数中,你可以修改自变量 `x` 和因变量 `y` 的数据。拟合结果将存储在 `slope` 和 `intercept` 变量中,分别表示斜率和截距。
这个自定义实现并不依赖于任何第三方库,只使用了 C 语言的基本数学运算。