【问题标题】:Griddata with 'cubic' Interpolation Method Returns NaN具有“三次”插值方法的 Griddata 返回 NaN
【发布时间】:2010-09-06 09:43:25
【问题描述】:

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

知道如何解决这个问题吗?

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

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'});

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果您的点在凸包之外,则您无法使用三次选项从 griddata 中获得除 NaN 以外的结果。如果该点正好在线上,则可能会产生 NaN,具体取决于计算的最低有效位中发生的情况。

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

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

    -v4 方法的优点是它可以顺利推断而不会产生 nans。这就是它被留在里面的原因。

    对于需要平滑结果的较大问题,并且仍希望在凸包之外进行推断,可以使用我的gridfit 工具。但它确实会进行平滑处理,而不是纯粹的插值。

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

    【讨论】:

    • gridfit 是一个很棒的工具,但是我的 x、y 输入不能单调增加,请参阅我更新的代码示例答案。
    • gridfit 并不是所有问题的解决方案。如果你有一个特定的感兴趣的领域不是格子,那么 gridfit 不适合你。
    • @woodchip,不知道你所说的“格子”是什么意思,但我确实有一组元素和坐标作为网格划分的结果。
    • Gridfit 估计一个表面,定义在一个矩形点阵的支持上。
    • @woodchips,它必须是矩形的吗?三角形呢?
    【解决方案2】:

    自 Matlab R2013a 发布以来,您可以使用 scatteredInterpolant 代替 griddata。 这有几个优点:

    • Matlab 可以对scatteredInterpolant 对象执行插值和外插。您可以在分散数据的凸包之外指定一个点,但仍然不会得到 NaN。

    • 一旦创建,scatteredInterpolant 对象可以被计算多次,与多次调用griddata 相比,可以节省计算时间。

    不利的一面:虽然您可以指定插值和外插方法,但cubic 不可用,而只有linearnearestnatural

    使用scatteredInterpolant 你的代码可能看起来像

    F = scatteredInterpolant(scatteredData(:,1),scatteredData(:,2),scatteredData(:,3));
    ZI=F(points(:,1),points(:,2));
    

    【讨论】:

      【解决方案3】:

      您确定要三次插值吗?对于某些输入数据,计算的 z 节点可能具有极大的值!

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

      【讨论】:

      • -v4 选项的问题是它非常慢。如果您有很多点,它也会消耗大量内存。另请注意,这些 qhull 选项将在未来版本中消失。
      • 我不确定 Qhull 选项如何解决我的问题,请详细说明?
      • qhull 选项在这里没有帮助。它们只能在三角剖分可能失败时帮助生成三角剖分,这可能是由于复制点或复制点附近,或共线点。产生 nans 的问题远远超出了使用 qhull 选项的范围。它处于插值阶段,因此 qhull 无关紧要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 2011-10-09
      • 2014-06-26
      • 1970-01-01
      • 2014-02-17
      相关资源
      最近更新 更多