STM32可以用最小二乘法拟合多种函数的代码
时间: 2023-08-29 12:04:53 浏览: 161
基于最小二乘算法的函数拟合
当然可以!下面是一个使用最小二乘法拟合多种函数的示例代码:
```c
#include <stdio.h>
#include <math.h>
#define N 10 // 数据点数量
// 定义函数类型
typedef float (*fitting_func)(float);
// 定义数据点结构体
typedef struct {
float x;
float y;
} Point;
// 定义拟合参数结构体
typedef struct {
float coef;
float offset;
} FittingParams;
// 定义拟合函数
float linear_func(float x) {
return 2 * x + 1;
}
float quadratic_func(float x) {
return 3 * x * x - 2 * x + 1;
}
// 最小二乘法拟合函数
FittingParams least_squares_fit(Point data[], int n, fitting_func func) {
float sum_x = 0, sum_y = 0, sum_xx = 0, sum_xy = 0;
// 计算和
for (int i = 0; i < n; i++) {
float x = data[i].x;
float y = data[i].y;
sum_x += x;
sum_y += y;
sum_xx += x * x;
sum_xy += x * y;
}
// 计算斜率和截距
float coef = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x * sum_x);
float offset = (sum_y - coef * sum_x) / n;
FittingParams params;
params.coef = coef;
params.offset = offset;
return params;
}
int main() {
Point data[N];
// 构造数据点
for (int i = 0; i < N; i++) {
data[i].x = i;
data[i].y = quadratic_func(i) + 2; // 添加一些噪音
}
// 使用最小二乘法拟合
FittingParams params = least_squares_fit(data, N, quadratic_func);
printf("拟合结果:y = %.2fx^2 + %.2fx + %.2f\n", params.coef, params.offset, 2.0);
return 0;
}
```
以上代码演示了如何使用最小二乘法拟合二次函数。你可以根据需要修改拟合的函数类型,以及数据点的数量和数值。请确保在使用之前正确配置 STM32 的开发环境,并将代码适配到相应的平台上。希望对你有所帮助!
阅读全文