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';
相关推荐
声声codeGrandMaster6 分钟前
AI之模型提升
人工智能·pytorch·python·算法·ai
黄金小码农22 分钟前
工具坐标系
算法
小南家的青蛙29 分钟前
LeetCode第1261题 - 在受污染的二叉树中查找元素
算法·leetcode·职场和发展
君义_noip32 分钟前
信息学奥赛一本通 1453:移动玩具 | 洛谷 P4289 [HAOI2008] 移动玩具
c++·算法·信息学奥赛·csp-s
玖剹39 分钟前
记忆化搜索题目(二)
c语言·c++·算法·leetcode·深度优先·剪枝·深度优先遍历
Xy-unu2 小时前
[LLM]AIM: Adaptive Inference of Multi-Modal LLMs via Token Merging and Pruning
论文阅读·人工智能·算法·机器学习·transformer·论文笔记·剪枝
Hcoco_me2 小时前
算法选型 + 调参避坑指南
算法
Jul1en_2 小时前
【算法】分治-归并类题目
java·算法·leetcode·排序算法
kangk122 小时前
统计学基础之概率(生物信息方向)
人工智能·算法·机器学习
再__努力1点2 小时前
【77】积分图像:快速计算矩形区域和核心逻辑
开发语言·图像处理·人工智能·python·算法·计算机视觉