前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于Matlab插值的问题,这些应该够用了吧

关于Matlab插值的问题,这些应该够用了吧

作者头像
全栈程序员站长
发布2022-08-24 09:39:12
2.3K0
发布2022-08-24 09:39:12
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

Matlab插值方法

一、散点数据插值

使用场景:用站点数据插值成网格数据时,可以使用散点数据插值方法 参考链接:https://ww2.mathworks.cn/help/matlab/ref/scatteredinterpolant.html

在这里插入图片描述
在这里插入图片描述

1.1 简要举例

创建包含 50 个散点的样本数据集。

代码语言:javascript
复制
x = -3 + 6*rand(50,1);
y = -3 + 6*rand(50,1);
v = sin(x).^4 .* cos(y);

创建插值和查询点网格

代码语言:javascript
复制
F = scatteredInterpolant(x,y,v);
[xq,yq] = meshgrid(-3:0.1:3);

绘制结果

代码语言:javascript
复制
F.Method = 'nearest';
vq1 = F(xq,yq);
plot3(x,y,v,'mo')
hold on
mesh(xq,yq,vq1)
title('Nearest Neighbor')
legend('Sample Points','Interpolated Surface','Location','NorthWest')
线性插值结果
线性插值结果

1.2 可选的插值方法

注意:可以选择插值方法和“外插方法

Method

说明

连续性

‘linear’(默认值)

线性插值

C0

‘nearest’

最近邻点插值

不连续

‘natural’

自然邻点插值

C1(样本点处除外)

ExtrapolationMethod

说明

‘linear’

基于边界梯度的线性外插。Method 为 ‘linear’ 或 ‘natural’ 时的默认值。

‘nearest’

最近邻点外插。此方法的计算结果为边界处的最近邻点的值。Method 为 ‘nearest’ 时的默认值。

‘none’

无外插。Points 凸包之外的任何查询返回 NaN。


二、网格数据插值

使用场景:粗分辨率网格降尺度为细分辨率网格时可用 参考链接:https://ww2.mathworks.cn/help/matlab/ref/griddedinterpolant.html

在这里插入图片描述
在这里插入图片描述

2.1 简要举例

  1. 创建网格样本点
代码语言:javascript
复制
[x,y] = ndgrid(-5:0.8:5);
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
surf(x,y,z)
  1. 构建插值结构
代码语言:javascript
复制
F = griddedInterpolant(x,y,z);
  1. 插值以提高分辨率
代码语言:javascript
复制
[xq,yq] = ndgrid(-5:0.1:5);
vq = F(xq,yq);
surf(xq,yq,vq)

2.2 可选插值方法

Method

Value

Value

Value

‘linear’(默认值)

线性插值。在查询点插入的值基于各维中邻点网格点处数值的线性插值

C0

每个维需要至少 2 个网格点。比 ‘nearest’ 需要更多内存

‘nearest’

最近邻点插值。在查询点插入的值是距样本网格点最近的值。

不连续

每个维度需要 2 个网格点。内存要求最低,计算速度最快

‘next’

下一个邻点插值(仅限于一维)。在查询点插入的值是下一个抽样网格点的值。

不连续

需要至少 2 个点。内存要求和计算时间与 ‘nearest’ 相同

‘previous’

上一个邻点插值(仅限于一维)。在查询点插入的值是上一个抽样网格点的值。

不连续

需要至少 2 个点。内存要求和计算时间与 ‘nearest’ 相同

‘pchip’

保形分段三次插值(仅限一维)。在查询点插入的值基于邻点网格点处数值的保形分段三次插值。

C1

需要至少 4 个点。比 ‘linear’ 需要更多内存和计算时间

‘cubic’

三次插值。在查询点插入的值基于各维中邻点网格点处数值的三次插值。插值基于三次卷积。

C1

网格必须有均匀间距,虽然每个维度上的间距不必相同。每维需要至少 4 个网格点。比 ‘linear’ 需要更多内存和计算时间

‘makima’

修正 Akima 三次 Hermite 插值。在查询点插入的值基于次数最大为 3 的多项式的分段函数,使用各维中相邻网格点的值进行计算。为防过冲,已修正 Akima 公式。

C1

每一维需要至少 2 个点。产生的波动比 ‘spline’ 小,但不像 ‘pchip’ 那样急剧变平。计算成本高于 ‘pchip’,但通常低于 ‘spline’。内存要求与 ‘spline’ 类似

‘spline’

三次样条插值。在查询点插入的值基于各维中邻点网格点处数值的三次插值。插值基于使用非结终止条件的三次样条。

C2

每维需要 4 个网格点。比 ‘cubic’ 需要更多内存和计算时间

ExtrapolationMethod – 外插方法 ‘linear’ (默认) | ‘nearest’ | ‘next’ | ‘previous’ | ‘pchip’ | ‘cubic’ | ‘spline’ | ‘makima’ | ‘none’ 外插方法,指定为 ‘linear’、‘nearest’、‘next’、‘previous’、‘pchip’、‘cubic’、‘spline’ 或 ‘makima’。另外,如果您希望网格域之外的查询返回 NaN 值,可以指定 ‘none’。

如果您省略 ExtrapolationMethod,则默认值是为 Method 指定的值。如果您同时省略 Method 和 ExtrapolationMethod 参数,则两个值均默认为 ‘linear’

总结及参考

(1)注意:可以选择插值方法和“外插方法” (2) 如果存在大量样本点或查询点,或者担心内存使用量太大,您可以使用网格向量来提高内存使用率。

与interp2/3的差别 interp2要求矩形网格(meshgrid); griddata的插值网格可以随意,包括矩形网格和非矩形网格; griddedInterpolant 比 interp2 更高效一些;

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140034.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Matlab插值方法
  • 一、散点数据插值
    • 1.1 简要举例
      • 1.2 可选的插值方法
      • 二、网格数据插值
        • 2.1 简要举例
          • 2.2 可选插值方法
          • 总结及参考
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档