建模算法设计入门:多项式曲线拟合(MATLAB)
原理请参考:李庆杨 《数值分析》,3.4节曲线拟合的最小二乘法。
如果根据原理写自己MATLAB算法:
测试案例
例1:以自定义的多项式测试算法拟合的系数的正确性。
可见,算法在功能上是正确的。如果添加一定的噪声,结果如下,与实际系数存在一定的差异,但是在最小二乘意义下是最优的。
例2. 以函数为例等距划分
个数据点,以此数据拟合多项式曲线。
结果如下

从图1中可以看到,两端点处存在些许振荡现象,盲目提高多项式拟合的阶次,比如20阶,并不会使得拟合的曲线更逼近真实曲线,而是在拟合点处的误差越来越小,mse减少到3.8993e-08,而预测误差反而会增加,出现机器学习中的过拟合现象。如图2所示

解决这一问题的一个思路是,增加所拟合的数据量,如图3所示,为50个数据量,20次多项式曲线拟合的结果。

实际应用中,所给定的数据未必知道背后的真实模型,一旦知道背后的真实模型,也就没有拟合的必要了。且采样数据存在一定的误差,故此例模拟。
该示例代码也可进行非线性曲线拟合,但需要进行转换。
例 3:在区间内等分15个数值节点,按照
生成离散数据点,试拟合数学模型
,即确定系数
和
。
结果如下,test_LSPolynomialCurveFitting2为本人定义的脚本文件名称。
由于数据存在一定的噪声,故拟合的系数与真实系数存在些许误差。
