MATLAB计算与建模常见函数:4.插值

插值

什么是插值?

  • 通常实验测量或者采集的数据都是离散数值
  • 插值是指在所给的基准数据情况下,研究如何平滑地估算出基准数据之间其它点的函数数值
  • 一些点的数据无法获得,或者获取这些点的数据代价较高时,插值就会发挥很大的作用;

插值方法

  • 最近点插值:
  • 线性插值:

更高精度的插值:

  • 多项式插值;
  • 埃尔米特插值;
  • 样条插值;

MATLAB提供的插值函数

在MATLAB中,插值函数保存在MATLAB工具箱的polyfun子目录下;

插值函数按插值变量的个数分为:

  • 一维插值
  • 二维插值
  • 多维插值

一维插值

vq=interpl(x,v,xq)

  • 使用**线性插值(默认)**返回一维函数在特定查询点的插入值。
  • 向量x包含样本点,v包含对应值v(x);(都是离散值)
  • 向量xq包含查询点的坐标 ,可以是多个查询点构成的向量
  • 若有多个在同一点坐标采样的数据集,则可以将ⅴ以数组的形式进行传递。数组V的每一列都包含一组不同的一维样本值。

vq=interpl(x,v,xq,method)

  • 指定备选插值方法:'linear'、'nearest'、'next'、'previous'、'pchip'、'cubic'、'v5cubic'、'makima'或'spline'。默认方法为'linear'。

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

  • 用于指定外插策略 ,来计算落在x域范围外的点 。如果希望使用method算法进行外插,可将extrapolation设置为'extrap'。也可以指定一个标量值,这种情况下,interpl将为所有落在x域范围外的点返回该标量值。

常用插值方法介绍

方法 说明
'linear' 线性插值;查询点基于各维中邻点网格点处数值的线性插值(默认方法),至少2个点。
'nearest' 最近点插值;在查询点插入的值是距样本网格点最近的值,至少2个点。
'pchip' 保形分段三次插值。在插值点插入的值基于邻点网格点处数值的保形分段三次插值,至少4个点。
'cubic' 同'pchip'
'spline' 使用非终止条件的样条插值,在查询点插入的值基于各维中邻点网格点处的数值的三次插值,至少4个点。
'makima' 修正Akima三次Hermite插值。在查询点插入的值基于次数最大为3的多项式分段函数少2个点。

例子:

matlab 复制代码
x = 0:pi/4:2*pi;
v = sin(x);
xq = 0:pi/16:2*pi;
figure;
vq1 = interp1(x,v,xq);
plot(x,v,'o',xq,vq1,':.');
xlim([0 2*pi]);
title('linear interpolation');

vq2 = interp1(x,v,xq,'spline');
figure;
plot(x,v,'o',xq,vq2,':.');
xlim([0 2*pi]);
title('spline interpolation');

在一个查询点插入多组数据

matlab 复制代码
x= (-5:5)';
v1=x.^2;
v2=2*x.^2+2;
v3=3*x.^2+4;    
v= [v1,v2,v3];
xq=-5:0.1:5;
vq=interp1(x,v,xq,'pchip');
figure;
plot(x,v1,'o',x,v2,'o',x,v3,'o',xq,vq);
legend('x^2','x^3','x^4','interpolated');
h=gca;
h.XTick=-5:5;

二维插值

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

  • 使用线性插值 返回双变量函数在特定查询点的插入值。结果始终穿过函数的原始采样。
  • X和Y包含样本点的坐标。V包含各样本点处的对应函数值。
  • Xq和Yq包含查询点的坐标

Vq=interp2(V,k)

  • 将每个维度上样本值之间的间隔反复分割k次 ,形成优化网格,并在这些网格上返回插入值 。这将在样本值之间生成2k-1个插入点

Vq=interp2(,method)

  • 指定备选插值方法:'linear'、'nearest'、'cubic'、'makima'或'spline'。默认方法为'linear';

Vq=interp2(,method,extrapval)

  • 指定标量值extrapval,此参数会为处于样本点域范围外的所有查询点赋予该标量值 。如果样本点域范围外的查询省略extrapval参数,则基于method参数 ,interp2返回下列值之一:对于'spline'和'makima'方法,返回外插值;对于其他内插方法,返回NaN值;
    例子:
matlab 复制代码
[X,Y] = meshgrid(-3:3);
V = peaks(X,Y);

figure;
surf(X,Y,V);
title('original data');

[Xq,Yq] = meshgrid(-3:0.2:3);
Vq = interp2(X,Y,V,Xq,Yq);

figure;
surf(Xq,Yq,Vq);
title('interpolated data');

Vq = interp2(X,Y,V,Xq,Yq,'cubic');
figure;
surf(Xq,Yq,Vq);
title('interpolated data with cubic method');

二维插值一优化灰度图像

matlab 复制代码
load flujet.mat
colormap gray
%隔离图像的一个小区域并将其转换为单精度
V=single(X(200:300,1:25));
%显示该图像区域
imagesc(V);
axis off
title('Original Image')

多维插值函数

Vq=interpn(X1,X2,...Xn,V,Xql,Xq2,...Xgn)

  • 使用线性插值返回变量函数在特定查询点的插入值;结果始终穿过函数的原始采样;
  • X1,X2,Xn包含样本点的坐标,V包含各样本点处的对应函数值;
  • Xql,Xq2,Xqn包含查询点的坐标;

Vq=interpn(,method)

  • 指定备选插值方法:'linear'、'nearest'、'pchip'、'cubic'、'makima'或'spline'。默认方法为'linear';
相关推荐
萱仔学习自我记录1 小时前
机器学习常用的评价指标原理和代码
人工智能·机器学习
朔北之忘 Clancy1 小时前
2021 年 12 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·算法·青少年编程·题解
念啊啊啊啊丶1 小时前
【AIGC】2022-NIPS-视频扩散模型
人工智能·深度学习·神经网络·机器学习·计算机视觉
zty郑桐羽呀2 小时前
[C++] 小游戏 征伐 SLG DNF 0.0.1 版本 zty出品
开发语言·数据结构·c++·算法·开源·zty郑桐羽呀·zty
black_blank2 小时前
机器人跳跃问题
数据结构·算法·机器人
zh路西法2 小时前
【Matlab绘图】从Excel导入表格并进行三维绘图
开发语言·matlab·excel
杳戢3 小时前
技术美术百人计划 | 《5.1.3 PBR-基于物理的灯光》笔记
图像处理·人工智能·笔记·算法·计算机视觉·技术美术
凭栏落花侧3 小时前
数据揭秘:分类与预测技术在商业洞察中的应用与实践
人工智能·算法·机器学习·分类·数据挖掘·conda·pip
研一备战就业3 小时前
Leetcode: 0091-0099题速览
算法·leetcode
码农超哥同学3 小时前
Python知识点:如何使用Edge Impulse与Python进行机器学习模型部署
python·机器学习·面试·edge·编程