MATLAB数据插值和曲线拟合

MATLAB数据插值

在工程测量和科学实验中,所得到的数据通常是离散的。
如果要得到这些离散点以外的其他点的数值,就需要根据这些已知数据进行插值。
根据被插值函数的自变量个数,插值问题分为一维插值、二维插值和多维插值等;根据是用分段直线、多项式或样条函数来作为插值函数,插值问题又分为线性插值、多项式插值和样条插值等。

1.一维插值

如果被插值函数是一个单变量函数,则数据插值问题称为一维插值。一维插值采用的方法有线性方法、最近方法、3次多项式和3次样条插值。

函数interp1:插值函数
Y1=interp1(X,Y,X1,method)
根据X、Y的值,计算函数在X1处的值。其中,X、Y是两个等长的已知向量,分别描述采样点和采样值。若同一个采样点有多种采样值,则Y可以为矩阵,Y的每一列对应一组采样。X1是一个向量或标量,描述欲插值的点,Y1是一个与X1等长的插值结果。

参数:method :用于指定插值方法,允许的取值有:
‘linear’:线性插值。线性插值是默认的插值方法,它是把与插值点靠近的两个数据点用直线连接,然后在直线上选取对应插值点的数据。
‘nearest’:最近点插值。根据插值点与已知数据点的远近程度进行插值。插值点优先选择较近的数据点进行插值操作。
‘pchip’:分段3次埃尔米特插值。MATLAB中有一个专门的3次Hermite插值函数pchip(X,Y,X1),其功能及使用方法与函数interp1(X,Y,X1,‘pchip’)相同。
‘spline’:3次样条插值。所谓3次样条插值,是指在每个分段(子区间)内构造一个3次多项式,使其插值函数除满足插值条件外,还要求在各节点处具有光滑的条件。MATLAB中有一个专门的3次样条插值函数spline(X,Y,X1),其功能及使用方法与函数interp1(X,Y,X1,‘spline’)相同。

例:给出以下概率积分的数据表如表6-1所示,用不同的插值方法计算f(0.472)
在这里插入图片描述

>> x=0.46:0.01:0.49;         %给出x和f(x)
>> f=[0.4846555,0.4937542,0.5027498,0.5116683];
>> format long
>> interp1(x,f,0.472)     %用默认方法,即线性插值计算f(0.472)
ans =  0.495553320000000
>> interp1(x,f,0.472,'nearest')  %用最近点插值计算f(0.472)
ans = 0.493754200000000
>> interp1(x,f,0.472,'pchip')      %用3次Hermite插值计算f(0.472)
ans = 0.495561119712056
>> interp1(x,f,0.472,'spline')    %用3次样条插值计算f(0.472)
ans = 0.495560736000000
format short

例:某检测参数f随时间t的采样结果如表6-2,用数据插值法计算t=2,12,22,32,42,52时的f值
MATLAB数据插值和曲线拟合_第1张图片

>> T=0:5:65;
>> X=2:10:52;
>>F=[3.2015,2.2560,879.5,1835.9,2968.8,4136.2,5237.9,6152.7,6725.3,6848.3,6403.5,6824.7,7328.5,7857.6];
>> F1=interp1(T,F,X)        %用线性插值方法插值
>> F2=interp1(T,F,X,'nearest')     %用最近点插值方法插值
>> F3=interp1(T,F,X,'pchip')       %用3次Hermite插值方法插值
>> F4=interp1(T,F,X,'spline')      %用3次样条插值方法插值

2.二维插值

当函数依赖于两个自变量变化时,其采样点就应该是一个由这两个参数组成的一个平面区域,插值函数也是一个二维函数。对依赖于两个参数的函数进行插值的问题称为二维插值问题。同样,在MATLAB中,提供了解决二维插值问题的函数interp2,其调用格式为:
Z1=interp2(X,Y,Z,X1,Y1,method)
其中,X、Y是两个向量,分别描述两个参数的采样点,Z是与参数采样点对应的函数值,X1、Y1是两个向量或标量,描述欲插值的点。Z1是根据相应的插值方法得到的插值结果。 method的取值与一维插值函数相同。X、Y、Z也可以是矩阵形式。

例:设z=x2+y2,对z函数在[0,1]×[0,2]区域内进行插值。

>> x=0:0.1:1;y=0:0.2:2;
>> [X,Y]=meshgrid(x,y);       	%产生自变量网格坐标
>> Z=X.^2+Y.^2;                	%求对应的函数值
>> interp2(x,y,Z,0.5,0.5)     	%在(0.5,0.5)点插值
ans =
    0.5100
>> interp2(x,y,Z,[0.5 0.6],0.4) %在(0.5,0.4)点和(0.6,0.4)点插值
ans =
    0.4100    0.5200
>> interp2(x,y,Z,[0.5 0.6],[0.4 0.5])%在(0.5,0.4)点和(0.6,0.5)点插值
ans =
    0.4100    0.6200
%下一命令在(0.5,0.4),(0.6,0.4),(0.5,0.5)和(0.6,0.5)各点插值
>> interp2(x,y,Z,[0.5 0.6]',[0.4 0.5])
ans =
    0.4100    0.5200
    0.5100    0.6200

3.曲线拟合的实现

在MATLAB中,用polyfit函数来求得最小二乘拟合多项式的系数,再用polyval函数按所得的多项式计算所给出的点上的函数近似值。

polyfit函数的调用格式为:
P=polyfit(X,Y,m)
[P,S]=polyfit(X,Y,m)
[P,S,mu]=polyfit(X,Y,m)

函数根据采样点X和采样点函数值Y,产生一个m次多项式P及其在采样点的误差向量S。其中,X、Y是两个等长的向量,P是一个长度为m+1的向量,P的元素为多项式系数。mu是一个二元向量,mu(1)是mean(X),而mu(2)是std(X)。可以用polyval函数按所得的多项式计算X各点上多项式的值。

例:用一个3次多项式在区间[0,2π]内逼近函数。
在给定区间上,均匀地选择50个采样点,并计算采样点的函数值,然后利用3次多项式逼近。

>> X=linspace(0,2*pi,50);
>> Y=sin(X);
>> P=polyfit(X,Y,3)     %得到3次多项式的系数和误差
P =
    0.0912   -0.8596    1.8527   -0.1649

你可能感兴趣的:(MATLAB,matlab)