数据插值-MATLAB学习笔记

插值和拟合

初学插值,我不禁想:“这不就是曲线拟合吗?”,然而,在运用matlab画了几张图,兼之对比了曲线拟合和数据插值的实现方法,发现它们还是不同的。
曲线拟合,一般是追求拟合函数与原始数据的均方误差达到极小,是一种整体意义的逼近,对局部性质没有要求,因此,它允许拟合结果不经过样本值。
而数据插值的话,则是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点,插值函数在离散点之外的那些点都相当于“插入”的值。插值有全局插值,也有局部插值(比如分段线性插值),插值误差通常考虑的是逐点误差或最大模误差,插值的好坏往往通过某些局部的性质来体现,比如龙格现象或吉布斯振荡。

插值总结

根据被插函数的自变量个数,插值可分为一维插值、二维插值及多维插值;而根据插值函数的类型,可分为线性插值、多项式插值和样条插值等。

一维数据插值

若已知数据是平面上的一组点集,即被插函数是单变量函数时,此时称为一维插值问题。
matlab提供interp1函数实现一维插值,其调用格式如下:

vq = interp1(x,v,xq,method,extrapolation)

其中,输入参数x、v分别储存采样点和采样值。若同一个采样点对应多个采样值,则v为矩阵,v的每一列对应一种采样值。输入参数xq储存插值点,而输出参数vq是一个行数和xq的长度相同、列数与v相同的矩阵。选项method指定插值方法。
插值方法

例题:

分别用pchip方法和spline方法对下面的函数进行插值,绘制图形并比较两者异同。
在这里插入图片描述
代码如下:

subplot(1,2,1)
x1=1:7;
y1=x1;% x<=5和x>=3时y值
y1(x1<3)=3;
y1(x1>5)=5;
xq1=1:0.1:7; % 插值点
p1=interp1(x1,y1,xq1,'pchip');
s1=interp1(x1,y1,xq1,'spline');
plot(x1,y1,'ko',xq1,p1,'r-',xq1,s1,'b-.')
legend('样本点','pchip','spline')
subplot(1,2,2)
x2=1:0.2:2*pi;
y2=cos(5*x2)./(sqrt(x2));
xq2=1:0.1:2*pi;% 插值点
p2=interp1(x2,y2,xq2,'pchip');
s2=interp1(x2,y2,xq2,'spline');
plot(x2,y2,'bo',xq2,p2,'r-',xq2,s2,'b-.');
legend('样本点','pchip','spline')

运行结果图:
在这里插入图片描述

二维数据插值

若已知的数据集是三维空间中的离散点集,则被插函数是二维函数。
matlab提供interp2函数:

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

X,Y分别储存采样点的平面坐标,V储存采样值。其他参数同理。
Attention:如果X、Y表示二维平面上的点,则(X,Y)必须是网格形式!

例题:

一钢板长4m,宽2m,测得钢板表面(x,y)处的温度t(℃)见下表。

(1)用线性插值法求(2.8,1.7)处的温度。
(2)用三次样条插值法求出每隔0.1m处钢板的温度,并绘制插值后的温度分布图。
在这里插入图片描述

代码如下:

clc
clear
[x,y]=meshgrid(0:4,0:2); %创建网格
t=[44 25 20 24 30;42 21 20 23 38;25 23 19 27 40]; %样本值
[xq,yq]=meshgrid(0:0.1:4,0:0.1:2); % 创建插值网格
% (1)问
tq1=interp2(x,y,t,2.8,1.7,'linear');
% (2)问
tq2=interp2(x,y,t,xq,yq,'spline');
surf(xq,yq,tq2);

运行结果如下:
温度分布图
在上题中,因为x、y表示二维平面上的点,因此需要创建(x,y)网格。
此外,tq1=interp2(x,y,t,x1,y1,method);可以直接得到点(x1,y1)的插值。

多维插值

多维插值方法同二维。
n纬插值函数调用格式如下:

vq=interpn(x1,y1,……,v,xq1,yq1,……,method);

散乱数据插值

散乱数据指在二维平面或者三维空间中随机分布的数据,matlab提供griddata函数实现散乱数据插值。其调用格式如下:

vq=griddata(x,y,v,xq,yq,method);
vq=griddata(x,y,z,v,xq,yq,zq,method);

插值方法:在这里插入图片描述
做题时思路和上述的二维插值大致一样。

结语

简单记录一下,等下次有新的收获再来写点儿,溜了溜了。。
Hustle everyday

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值