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';
相关推荐
AI莫大猫12 分钟前
(6)YOLOv4算法基本原理以及和YOLOv3 的差异
算法·yolo
taoyong00115 分钟前
代码随想录算法训练营第十一天-239.滑动窗口最大值
c++·算法
Uu_05kkq24 分钟前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
清梦20202 小时前
经典问题---跳跃游戏II(贪心算法)
算法·游戏·贪心算法
paixiaoxin2 小时前
CV-OCR经典论文解读|An Empirical Study of Scaling Law for OCR/OCR 缩放定律的实证研究
人工智能·深度学习·机器学习·生成对抗网络·计算机视觉·ocr·.net
Dream_Snowar2 小时前
速通Python 第四节——函数
开发语言·python·算法
Altair澳汰尔2 小时前
数据分析和AI丨知识图谱,AI革命中数据集成和模型构建的关键推动者
人工智能·算法·机器学习·数据分析·知识图谱
call me by ur name3 小时前
VLM--CLIP作分类任务的损失函数
人工智能·机器学习·分类
A懿轩A3 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
Python机器学习AI3 小时前
分类模型的预测概率解读:3D概率分布可视化的直观呈现
算法·机器学习·分类