文章目录
前言
插值与拟合是一种基本的数据分析手段
一、插值
-
Lagrange插值法
在节点给出节点基函数,然后做基函数的线性组合,组合系数为节点函数值的一种插值多项式
-
Newton插值法
龙格现象(Runge现象)
高次插值的Runge现象
插值多项式的次数越高,并不代表插值的精度越高
上述结论仅仅在插值多项式的次数超过7时,插值多项式会出现严重的振荡现象
避免Runge现象的常用方法
- 分段低次插值
将插值区间分成若干个小区间,在小区间内用低次(二次、三次)插值,如样条函数插值
二、一维插值
命令格式
yi = interp1(x,y,xi,‘method’)
x,y为插值点,xi,yi为被插值点和插值结果,四者通常为向量
method:(插值方法)缺省为linear
- nearest 最邻近插值
- linear 线性插值
- spline 三次样条插值——每个区域构建三次多项式
- cubic 立方插值
matlab代码如下(示例):
x=0:2:24;
y=[12 9 9 10 18 24 28 27 25 20 18 15 13];
x1=13;
y1=interp1(x,y,x1,'spline');
xi=0:1/3600:24;
yi=interp1(x,y,xi,'spline');
plot(x,y,'*',xi,yi);
matlab中提供了专门用于样条函数插值及相关计算的工具箱Spline Toolbox。
三、二维插值
命令格式
zi=interp2(x,y,z,xi,yi,‘method’)
-
x,y,z为插值点,z为被插值函数在(x,y)处的值
-
xi,yi为被插值点,zi为输出的插值结果,可理解为插值函数在(xi,yi)处的值
-
x,y为向量,xi,yi为向量或矩阵,z和zi为矩阵
-
method:(默认双线性插值)
nearest——最邻近插值
linear——双线性插值
spline——双三次样条插值
cubic——双立方插值 -
plot3——空间曲线
-
mesh——空间曲面(网格图)
-
surf——空间曲面(表面图)
-
contour——等高线
四、散乱点插值
matlab代码
x=[129 140 103.5 88 185.5 195 105.5 157.5 107.5 77 81 162 162 117.5];
y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
z=[-4 -8 -6 -8 -6 -8 -8 -9 -9 -8 -8 -9 -4 -9];
[xi,yi]=meshgrid(75:0.5:200,-70:0.5:150);
zi=griddata(x,y,z,xi,yi,'cubic');
figure(1);
meshz(xi,yi,zi);
xlabel('X'),ylabel('Y'),zlabel('Z');
figure(2),contour(xi,yi,zi,[-5,-5],'b');
grid;
hold on;
plot(x,y,'+');
xlabel('X'),ylabel('Y');
hold on 表示多个图同时显示
五、拟合
用插值函数外推插值区间外的数据会产生较大误差,不宜用插值方法,应采取拟合方法
因为高次插值会出现Runge现象,使外推的数据出现巨大误差
拟合适用情形:
- 小样本预测
- 求导问题(求运动员运动速度:得到函数xy坐标,求导可得v)
- etc
1.曲线拟合问题
根据离散数据求数据间近似函数关系的问题
拟合问题与插值问题的区别
- 插值函数过已知点,拟合函数不一定过已知点
- 插值主要用于求函数值,拟合的主要目的使求函数关系,从而进行预测等进一步的分析
- 某些特定问题既可用插值,也可用拟合
2.拟合的计算
需解决:
- 线型的选择——根据专业知识和散点图确定线型
- 线型中参数的计算——
线性拟合的参数可采用最小二乘法计算
非线性拟合的参数要采用Guass-Newton迭代法
3.matlab代码
① 多项式拟合
[a,S]=polyfit(x,y,n)
② 非线性拟合
[b,r]=polyfit(x,y,fun,b0,option)
x=1:16;
y=[4.00 6.40 8.00 8.80 9.22 9.50 9.70 9.86 10.00 10.20 10.32 10.42 10.50 10.55 10.58 10.60];
y1=@(b,t)b(1)*exp(-t/b(2))+b(3)*exp(-t/b(4))+b(5);
b0=[-1 1 -1 1 1];
a=nlinfit(x,y,y1,b0)
xp=1:0.1:16;
yp=y1(a,xp);
plot(x,y,'.k',xp,yp,'r');
ps:matlab编程进行拟合有较大不便
matlab拟合工具箱√
可进行更好更便捷的拟合
使用步骤: