matlab应用——求极限,求导,求积分,解方程,函数绘图,三维图像,拟合函数....更多内容尽在个人专栏:matlab学习
才发现这个数据插值的返回值不是个函数表达式,是一系列点集,不能使用polyval函数预测值。
上一节我们说了数据插值,这一节我们再说一个差不多的东西,叫曲线拟合
曲线拟合:
先看一下百度百科的定义:
曲线拟合(curve fitting)是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。
主要方法就是我们高中学过的最小二乘法。
我们先生成一系列离散数据点:
x=1790:10:2010
y=[3 5 7 9 12 13 15 16 18 21 23 37 24 29 30 28 33 34 36 38 39 44 42]
plot(x,y,'r.')
polyfit函数:
polyfit函数用于进行曲线拟合,调用格式和插值函数interp1相似
polyfit(x,y,n),
x,y构成离散数据点(x,y),n则是设定用n次多项式进行拟合,比如n=3就是用最高三次多项式进行拟合。
现在对上面的离散数据点进行拟合:
x=1790:10:2010
y=[3 5 7 9 12 13 15 16 18 21 23 37 24 29 30 28 33 34 36 38 39 44 42]
f=polyfit(x,y,3) %用f记录拟合后的函数
x1=1790:0.2:2010 %重新定义自变量x1
y1=polyval(f,x1) %重新定义因变量y1
plot(x,y,'r*',x1,y1,'b')
为了区分,这里plot函数把原来的数据点也画进去:
这里我们还可以预测后面的数据
比如要求2020年的数据:
ans=polyval(f,2020)
结果就是:
这里简单说一说数据插值和曲线拟合的异同:
同:两者都是函数逼近的方法,都可以对未知数据点进行合理的预测,但都会有一定的误差。
异:插值需要的数据点相比曲线拟合较少
插值要求函数必须经过所有已知数据点,拟合不需要
最后再补充一点,可能会有知友发现插值和拟合的多项式函数都采用三次多项式。
首先,次数低于3,多项式拟合程度较差,不容易进行准确的拟合和插值
其次,多项式函数并非越高越好,这里有个Runge现象,即多项式函数次数越高,越容易产生振荡而偏离原函数,使得误差增大
到这里我们简单梳理了插值和拟合两种函数处理方式,下一节的内容暂定,我们可能要再回到符号计算。
欢迎喜欢的朋友点赞关注收藏啊:)