@
前言
插值和拟合都是要求通过已知的数据去寻求某个近似函数,使得近似函数与与已知数据有较高的拟合精度。本文将介绍两者的区别,相应的算法以及如何用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});//三次样条插值
用法同一维插值
总结本篇文章只是非常非常非常粗略地介绍了插值与拟合及实现方法,省去了证明过程、函数的更多用法和优化等。欢迎指正。