首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“cubic”插值方法的Griddata返回NaN

使用“cubic”插值方法的Griddata返回NaN
EN

Stack Overflow用户
提问于 2010-09-06 17:43:26
回答 3查看 5.9K关注 0票数 4

我发现如果我使用griddata方法和Cubic插值方法,对于xy的某些值,它将返回NaNOne post说,这是因为xy数据非常接近凸包。

你知道怎么解决这个问题吗?

编辑:请注意,我不能确保我的输入是单调增加的(因此,gridfit不起作用)。原因是因为我必须对我的区域(可以是2D中的不规则多边形)进行网格划分,在为每个点生成核心响应式Z值之前获取所有点。我的代码如下:

代码语言:javascript
复制
function ZI=Interpolate3D(scatteredData, boundary)
%scatteredData is the scattered points, boundary is the area that I want to generate 3D surface.



% Given the boundaries, generate mesh first 
[element,points]= GenMesh(boundary);
ZI = griddata(scatteredData(:,1),scatteredData(:,2),scatteredData(:,3),points(:,1),points(:,2), 'cubic',{'QJ'});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-06 21:02:05

如果您的点位于凸包之外,则无法使用NaN选项从栅格数据中获得除立方体以外的结果。如果点在直线上,则可能会产生NaN,这取决于计算的最低有效位发生了什么。

问题是立方方法使用三角剖分。如果您的点在凸包之外,则在该点上三角剖分失败。

当然,您可以使用-v4方法,但是有非常充分的理由说明为什么它在很大程度上被取代了。它使用基于距离的插值方法,其中对于n个数据点,必须生成完整的n×n矩阵。然后使用该矩阵求解一组方程。即使是中等规模的问题,这也会相当慢。

-v4方法的优点是它将平滑地外推,而不会产生nans。这就是它被留在那里的原因。

对于更大的问题,你需要一个平滑的结果,并且你仍然希望在凸包之外进行推断,你可以使用我的gridfit工具。它做的是平滑,而不是纯插值。

所有这些方法都有权衡,您必须解决您的特定问题。

票数 5
EN

Stack Overflow用户

发布于 2018-05-14 23:03:10

自从Matlab R2013a发布以来,你可以使用scatteredInterpolant而不是griddata。这有几个优点:

  • Matlab可以对scatteredInterpolant对象执行插值和外推。您可以在散乱数据的凸包之外指定一个点,但仍然得不到NaN。
  • 创建后,可以多次计算scatteredInterpolant对象,因此与多次调用griddata相比,可以节省计算时间。

缺点:虽然您可以指定插值和外推方法,但cubic不可用,只能使用linearnearestnatural

使用scatteredInterpolant,您的代码可能如下所示

代码语言:javascript
复制
F = scatteredInterpolant(scatteredData(:,1),scatteredData(:,2),scatteredData(:,3));
ZI=F(points(:,1),points(:,2));
票数 1
EN

Stack Overflow用户

发布于 2010-09-06 20:14:00

您确定要使用三次插值吗?对于某些输入数据,计算出的z节点可能会有非常大的值!

我总是使用-v4选项,就像你链接中提到的帖子一样。你也可以通过delaunayn使用Qhull中使用的选项,其中一些(但不是全部)是{'Qt','Qbb','Qc'} http://www.qhull.org/html/qhull.htm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3650449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档