天天动画片 > 八卦谈 > 建模算法入门笔记-多项式拟合(附源码)

建模算法入门笔记-多项式拟合(附源码)

八卦谈 佚名 2023-06-04 00:15:45

这两天宅在家里闲着是在是没什么意思,就总结一下以前数模时自己学到的一些算法吧,都是一些非常非常基础的算法,就作为学习笔记总结一下学到的最最干货的东西吧,以后学习科研都能用得上,也希望对各位学弟学妹们有所帮助吧,刚好2020MCM/ICM马上快开始了(今年没有参赛),希望对各位参加建模的同学有所帮助。关于数模的一些其他的干货(建模流程、写作、时间安排等等)我都放到这两个视频里面了,感兴趣的同学可以看一下:AV73775318(美赛)、AV66218067(国赛/省赛/校赛)。

多项式拟合

多项式拟合是数据拟合的一种,与插值有一定区别(插值要求曲线经过给定的点,拟合不一定经过给定的点),数据拟合有很多种类型,其中的最小二乘法求线性回归方程相信各位上过高中的人都听说过(没错,在北师大版数学必修三里就讲过最小二乘法,在选修2-3里还有回归分析。。。)但是听说过没掌握不要紧,因为我也没掌握。。。(当时只会用来做题,高考完了没复习过就忘记了)

言归正传,本次介绍MATLAB中三种多项式拟合的方法,我称之为代码法代码窗口法窗口法

0.先说问题:给定以下点(1,9)(2,5)(3,4)(4,4)(5,2)(6,3)(7,2)(8,4)(9,9),要求进行多项式拟合,求出x=5.5、x=10时的y值

题目对应的点图

可以由上图看出,题目给定的点分布都很“乱”,而且x=5.5与x=10的点都不存在,这时需要拟合曲线,根据曲线的函数,求出对应的y值(这里说一下,因为x=5.5在所给x区间[1,9]内,这时求对应的y值为内插法,反之因为x=10在区间外,此时求y值为外插法。一般用拟合法求内插外插法多为预测类,还有很多外插的方法,这里不一一赘述,但是也不是一定如此,如本题,10离9不远,因此最后预测的值理论上是较为可信的)

1.代码法

MATLAB代码如下:(使用时只需修改部分数据即可)

x=[1 2 3 4 5 6 7 8 9];
y=[9 5 4 4 2 3 2 4 9];
z=polyfit(x,y,3);
xi=0:1:10;
yi=polyval(z,xi);
plot(xi,yi,x,y,'r*');

其中,z=polyfit(x,y,3);的3指拟合的最高次幂为3,该最高次幂需要不断调整,以得出最佳拟合方案(尽量不要出现欠拟合过拟合现象即可)

此方法画出的函数图

据图可以读出,x=5.5时y约为2,x=10时y约为13.5

该方法较为简便,但是需要自行修改、调整函数系数,而且不能得出拟合曲线的具体函数值

2.代码窗口法

先输入以下代码,绘出点图:

x=[1 2 3 4 5 6 7 8 9];
y=[9 5 4 4 2 3 2 4 9];
plot(x,y,'r*')

绘出图像后点击“工具”中的“基本拟合”

再按照下图所示操作即可

样条插值
三次拟合

不同的拟合方法对应的函数都不同,根据函数图像,估计对应的y值即可

3.窗口法

值得注意的是:上述两种方法都能方便地得到函数图像,但是却不能得到具体的拟合函数表达式。而窗口法却能快速得到表达式(但是有的表达式的系数是以概率表达的)。

首先输入给定的x值与y值:x=[1 2 3 4 5 6 7 8 9];y=[9 5 4 4 2 3 2 4 9];

再点击APP栏的Curve Fitting栏
令X data为x,Y data为y后,选择拟合方式即可,本图为一次线性拟合
三次拟合
图像左侧的Results栏是输出的函数表达式,注意其系数是按照概率选取的

具体的拟合函数表达式需要视所用的拟合方法的不同而定。

这篇文章就写到这里,有什么意见或建议可以留言,谢谢大家:—)

本文标题:建模算法入门笔记-多项式拟合(附源码) - 八卦谈
本文地址:www.ttdhp.com/article/32651.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们