什么是拟合?
简单来说:拟合就是用一个函数,尽量“逼近”一组数据点。
比如:
有一天早上,小明饿坏了,开始狂吃包子。
你在旁边默默记录了他每分钟吃的包子总数:
| 时间(分钟) | 吃的包子总数 |
|---|---|
| 1 | 2 |
| 2 | 5 |
| 3 | 9 |
| 4 | 15 |
| 5 | 22 |
这些点不完全在一条直线上,但你知道小明吃包子的速度是越来越快的。
你想找一个函数(比如一个二次函数)来“表示”这些数据。
于是,你选择一个函数,然后让它“尽可能靠近”这些点,这个过程就叫拟合。
线性最小二乘拟合
什么是线性最小二乘拟合?
全称叫:
用最小化误差平方和的方法,来拟合一条最优的线性函数。
简单解释就是,我们要进行拟合,但是拟合后的结果会有误差,我们通过让误差平方和最小来找到最优的线性函数。这就是最小二乘法。
这是最基本的一种数据拟合方法,其核心思想是:
用一条“最接近”数据点的直线(或函数)去拟合这些数据,使得所有点到这条线的“垂直距离的平方和”最小。
通俗来说,就是你给我一堆点,我想画一条线穿过这些点,但点未必都能刚好落在线上,于是我尽量让这些点“平均离线近一点”。
MATLAB的线性最小二乘拟合中,用的比较多的就是多项式拟合。
多项式拟合
什么是多项式拟合?
当你用的“函数”不仅是一条直线,而是高次多项式函数时,就叫多项式拟合。
比如:
拟合二次函数
命令为:
A=polyfit(x,y,m)
其中
含义为对数据 (x,y) 拟合一个m次多项式,返回一个多项式的系数向量 A。
用你刚才拟合出来的多项式 A,在 x 处求对应的 y,用下面这个命令:
y=polyval(A,x)
练习1
对下面一组数据作二次多项式拟合:
| xi | 0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | 1 |
| yi | -0.447 | 1.978 | 3.28 | 6.16 | 7.08 | 7.34 | 7.66 | 9.56 | 9.48 | 9.30 | 11.2 |
代码:
x=0:0.1:1;%x从0到1变化,每次增加0.1
y=[-0.047 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
A=polyfit(x,y,2);%对数据(x,y)进行2次项的多项式拟合
z=polyval(A,x);
plot(x,y,'k+',x,z,'r');%做出数据点和拟合曲线的图形
结果展示:
A=
-9.1115
19.2482
0.2005

1193

被折叠的 条评论
为什么被折叠?



