欢迎光临散文网 会员登陆 & 注册

建模算法设计入门:多项式曲线拟合(MATLAB)

2022-08-16 20:03 作者:鸣凤在竹-白驹食场  | 我要投稿

原理请参考:李庆杨 《数值分析》,3.4节曲线拟合的最小二乘法。

如果根据原理写自己MATLAB算法:

测试案例

例1:以自定义的多项式y%3D0.5x%5E3%2B2x%5E2-1.5x%2B2.5%2C%20x%5Cin%20%5B0%2C%205%5D测试算法拟合的系数的正确性。

可见,算法在功能上是正确的。如果添加一定的噪声y%2B0.1%5Cvarepsilon%20%2C%5Cvarepsilon%20%5Csim%20N(0%2C1),结果如下,与实际系数存在一定的差异,但是在最小二乘意义下是最优的。

例2. 以函数%5B-1%2C3%5D为例等距划分n个数据点,以此数据拟合多项式曲线。

结果如下

图1 10次多项式曲线拟合

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

图2 20次多项式曲线拟合

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

图3 50个数据点的20次拟合曲线

实际应用中,所给定的数据未必知道背后的真实模型,一旦知道背后的真实模型,也就没有拟合的必要了。且采样数据存在一定的误差,故此例模拟。

该示例代码也可进行非线性曲线拟合,但需要进行转换。

例 3:在区间%5B-1%2C3%5D内等分15个数值节点,按照y%3D3e%5E%7B0.5x%7D%2B%5Cvarepsilon%20%2C%20%5Cvarepsilon%20%5Csim%20N(0%2C1)生成离散数据点,试拟合数学模型y%3Dae%5E%7Bbx%7D,即确定系数ab

结果如下,test_LSPolynomialCurveFitting2为本人定义的脚本文件名称。

由于数据存在一定的噪声,故拟合的系数与真实系数存在些许误差。

图4 非线性曲线拟合


建模算法设计入门:多项式曲线拟合(MATLAB)的评论 (共 条)

分享到微博请遵守国家法律