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';
相关推荐
ZZZ_O^O2 分钟前
动态规划-背包问题——[模版]完全背包问题
c++·学习·算法·leetcode·动态规划
Koishi_TvT6 分钟前
蓝桥杯c++算法学习【3】之思维与贪心(重复字符串、翻硬币、乘积最大、皮亚诺曲线距离【难】:::非常典型的必刷例题!!!)
c++·学习·算法·游戏·贪心算法·蓝桥杯·c
t5y221 小时前
【C语言】Union
c语言·开发语言·算法
工作不忙1 小时前
c++调用MATLAB engine无法调用到自定义MATLAB函数c++调用MATLAB simulink文件.mdl.slx使用引擎
c++·windows·matlab
MATLAB滤波1 小时前
二维、三维情况下的锚点优选方法
算法·matlab·定位
ZZZ_O^O1 小时前
动态规划-背包问题——1049.最后一块石头的重量II
c++·学习·算法·leetcode·动态规划
城市数据研习社2 小时前
【论文分享】三维景观格局如何影响城市居民的情绪
深度学习·机器学习·数据分析
xisai882 小时前
2025年开考科目有哪些?
java·开发语言·javascript·算法·kotlin
夕水2 小时前
真是惭愧,直到今天,我才搞懂桶排序算法
javascript·算法
yangmc043 小时前
判断子序列
开发语言·数据结构·c++·算法·矩阵·图论