@
前言
插值和拟合都是要求通过已知的数据去寻求某个近似函数,使得近似函数与与已知数据有较高的拟合精度。本文将介绍两者的区别,相应的算法以及如何用matlab实现。
一、拟合
1.定义
已知一组(二维)数据,即平面上的n个点\((x_i,y_i)\),\(i=1,2,...,n\),\(x_i\)互不相同,寻求一个函数(曲线)\(y=f(x)\),使\(f(x)\)在某种准则下与所有数据点最为接近,即曲线拟合得最好。
注意:拟合曲线不要求经过所有的数据点
2.三种判别准则
使偏差的绝对值最小;
使偏差的最大绝对值最小;
使偏差的平方和最小(即最小二乘法)。
3.最小二乘法
(1)一般形式
最小二乘法是解决拟合的最常用方法,基本思路是令
其中,\(r_k(x)\)为实现选定的一组线性无关的函数;\(a_k\)为待定系数\((k=1,2,...,m;m<n)\)
令
则有唯一解
证明略
(2)常用函数
直线:\(y=a_1x+a_2\)
多项式:\(y=a_1x^m+...+a_mx+a_{m+1}\)(m一般为2或3)
双曲线(一支):\(y=\frac{a_1}{x}+a_2\)
指数曲线:\(y=a_1e^{a_2x}\)
注意:对于指数曲线,需要现转化为线性函数
(3)matlab实现
解方程组方法:
易得
注意是左除
多项式拟合方法:
a=polyfit(x0,y0,m);
y=polyval(a,x);
其中\(x_0,y_0\)是要拟合的数据,\(m\)为拟合的多项式次数,\(a\)为拟合多项式
的系数向量\(a=[a(1),...,a(m),a(m+1)]\)。
二、插值
1.定义
在平面上给定一组离散点列,要求一条曲线,把这些点按次序连接起来,称为插值。
注意:拟合曲线必须经过所有的数据点
2.方法
(1)分段线性插值
分段线性插值,字面意思,就是把相邻两点用直线连接起来,记作\(I_n(x)\)。那么\(I_n(x)\)必经过所有数据点。\(I_n(x)\)可表示为\(I_n(x)=\sum\limits_{i=0}^{n}y_il_i(x)\),其中
\(I_n\)具有良好的收敛性,即当\(n \rightarrow \infty\)时,\(I_n(x)=f(x)\)
分段线性插值适用于大多数情况。但如果对函数的光滑性要求较高时,就需要使用其它方法。
(2)拉格朗日插值多项式
(3)样条插值
样条插值的优势在于产生的函数有连续的曲率,本质是一个具有一定光滑性的分段多项式。一般使用三次样条插值。
3.matlab实现
(1)一维插值函数
y=interp1(x0,y0,x,‘...‘);
‘linear‘//线性插值(默认)
‘spline‘//三次样条插值
‘nearest‘//最近项插值
‘cubic‘//立方插值
\(x_0\)必须是单调的
(2)三次样条插值
y=interp1(x0,y0,x,‘spline‘);
y=spline(x0,y0,x);
pp=csape(x0,y0);
y=fnval(pp,x);
(3)二维插值
interp2(x0,y0,z0,x,y,‘...‘);
pp=csape({x0,y0},z0),z=fnval(pp,{x,y});//三次样条插值
用法同一维插值
总结
本篇文章只是非常非常非常粗略地介绍了插值与拟合及实现方法,省去了证明过程、函数的更多用法和优化等。欢迎指正。