# fitting_function **Repository Path**: lozenyin/fitting-function ## Basic Information - **Project Name**: fitting_function - **Description**: 三点拟合函数 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-26 - **Last Updated**: 2024-03-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 拟合函数——fitting function ## 背景 气体流量计捕获的数据有较大的误差,组长想着是否可以使用校准的方法来减少误差。 ## 方法 校准方法:使用串口屏获取三次采集的脉冲数和实际流量值(外部读取输入),在经过拟合成矫正函数,输入脉冲数进行再计算。 --- 以下是一些常见的拟合方法: 1. **高斯-牛顿法**:这是一种用于求解非线性最小二乘问题的迭代优化算法。它适用于更复杂的模型,如非线性回归。 2. **梯度下降法**:这是一种迭代优化算法,用于寻找函数的局部最小值。它通过迭代地调整参数来逼近最小值。 3. **牛顿-拉夫森方法**:这是一种数值方法,用于求解非线性方程组。它使用函数的导数(斜率)来估计函数值的变化。 4. **最小二乘法(线性回归)**:用于线性模型的拟合,包括一次方程、二次方程等。 5. **多项式拟合**:通过计算数据点的多项式系数来直接拟合曲线。 6. **样条插值**:用于在数据点之间创建平滑的曲线。有多种类型的样条,如线性样条、二次样条和B样条。 7. **神经网络**:通过训练神经网络来逼近数据之间的映射关系。 8. **支持向量机(SVM)**:一种用于分类和回归分析的监督学习算法。 9. **决策树和随机森林**:这些是用于分类和回归的决策树算法,它们可以用来拟合数据。 10. **岭回归**:这是一种修改的最小二乘法,它通过添加L2正则化来解决最小二乘问题,以防止过拟合。 每种方法都有其特点和适用场景。选择哪种方法取决于数据的性质、问题的复杂性以及你的具体需求。在实际应用中,可能需要尝试多种方法来找到最适合数据集的拟合方法。 ## 工程记录 ### 方法测试结果 | 源码名 | 方法 | 结果 | 缺陷 | | ---------------------------- | ----------------------- | ------------------------ | ------------------------------------------------------------------------------------------ | | fit_curve_v2.c | 高斯消元法 | 成功 | 在校准数据范围外的结果误差较大,
在使用放大100000倍后在进行计算的方法范围内的在5%~10% | | curve_fitting_v1.c | 最小二乘值法 | 失败,没有生成相应的参数 | | | polynomial_fitting.c | | | | | gauss_newton_fit_v1.c | 高斯-牛顿法、雅可比矩阵 | 失败,没有生成相应的参数 | | | linear_regression_fitting.py | 线性回归 | 成功,精度达0.1%~5% | 需要多数据校准,没有普适性 | --- ### 工程目录 ```bash . ├── bin # 放置编译好的二进制执行文件 ├── c # 存放C源码 ├── python # 机器学习方法拟合函数表达式 └── readme.md 3 directories, 1 file ``` ## 成功的例子 ### 线性回归拟合 ```bash gcc -o bin/run_linear_function_fitting_v1 c/linear_function_fitting_v1.c && ./bin/run_linear_function_fitting_v1 ``` 目前看起来结果比较理想的方法,还没有进行上机测试…… 在模拟环境中使用线性回归,结果很不错,在单片机上运行试试 ### 高斯消元曲线拟合 ```bash g++ -o bin/run_fit_curve_v2 c/fit_curve_v2.c -lm && ./bin/run_fit_curve_v2 ``` 实际在STM32F103RCT6中运行,系数在double型变量中很小,最后乘与100000后进行计算的,当然结果也时要除以100000,这样的准确率就比较高些 存在的问题: 1. 在校准数值范围外的误差较大 2. 在校准数值范围内的误差大概在15%~8%左右 ## 参考 1. [在线多项式曲线拟合 在线函数曲线拟合 (yunser.com)](https://demo2.yunser.com/math/fitted_curve/)