【MATLAB】数据分析之数据插值

插值:求过已知有限个数据点的近似函数。

区别于拟合:

拟合:已知有限个数据点求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小。

基本常用的插值方法:拉格朗日多项式插值,牛顿插值,分段线性插值,Hermite插值,三次样条插值。

MATLAB使用interp1来实现一维插值。

Vq = interp1(X,V,Xq,METHOD)

  •       X为自变量的取值范围,V为函数值(或者与X长度一样的向量),Xq为插值点向量或数组,METHOD设定插值方法
  •      METHOD='nearest',邻近点插值。插值点函数值估计为与该插值点最近的数据点函数值
  •      METHOD='linear',线性插值法。根据相邻数据点的线性函数估计落在该区域内插值数据点函数值。
  •      METHOD='spline',三次样条插值。这种方法在相邻数据点间建立三次多项式函数,根据多项式函数确定插值数据点的函数值。
  •      METHOD='pchip'或'cubic',立方插值。通过分段立方Hermite插值方法计算插值结果。

上述方法的优缺点:

  • 邻近点插值方法的速度快,但平滑性差。

  • 线性插值占用内存多,运行时间长;但结果是连续的,但在顶点处斜率会改变。

  • 三次样条运算时间最长,但内存占用比立方插值少,其差值数据和导数都是连续的。平滑性最好,但如果输入的数据不一致,或者数据点过近,可能出现很差的插值效果 。

 

 一维插值


一、分段线性插值 

x=-2*pi:2*pi;
y=sin(x);
Xq=-2*pi:pi/2:2*pi;
Vq=interp1(x,y,Xq,'spline');%三次样条插值
plot(x,y,'rs',Xq,Vq,'k-')
legend('sin(x)','插值函数')

二、一维快速傅里叶插值

通过函数interpft( )实现。

  • y=interpft(x,n):对x进行傅里叶变换,然后采用n点傅里叶逆变换变回到时域。
  • y=interpft(x,n,dim):在dim指定的维度上进行操作。
clear all;clc;
x=0:1.2:10;
y=sin(x);
n=2*length(x);
yi=interpft(y,n);
xi=0:0.6:10.4;
hold on;
plot(x,y,'ro');
plot(xi,yi,'b.-');
title('一维快速傅里叶插值');
legend('原始数据','插值结果');

三、快速fouriersuanfa:数据呈现周期分布时使用

调用格式:

  • y=interpft(x,n)

采用interpft函数对sin插值

clear all;clc;
x=0:2*pi;
y=sin(x);
z=interpft(y,15);
xx=linspace(0,2*pi,15);
plot(x,y,'-o',xx,z,':o');
legend('sin(x)','插值函数')

二维插值


当被插函数是二元函数时,为二元插值。

MATLAB使用interp2来实现。

Vq = interp2(X,Y,V,Xq,Yq,METHOD)

X,Y,V是具有相同大小的矩阵,V(i,j)是数据点[X(i,j),Y(i,j)]上的函数值;Xq,Yq是待插值的数据网格。METHOD是一个字符串变量,表示不同的插值方法。

  • METHOD='nearest',邻近点插值。将插值点周围四个数据中离该插值点最近的数据点作为该插值点的函数值的估计值。
  • METHOD='linear',双线性插值。将插值点周围四个数据点的函数值的线性组合作为插值点的函数值的估计值。
  • METHOD='spline',三次样条插值。该方法的计算效率高,得到的曲面光滑。
  • METHOD='cubic',双立方插值。利用插值点周围的16个数据点,需要消耗较多的内存和计算时间,效率不高,但曲面更加光滑。 

猜你喜欢

转载自blog.csdn.net/csdn___csdn/article/details/81145328
今日推荐