【问题标题】:Matlab: Interpolating non-monotonic cordinate and function value combinationsMatlab:插值非单调坐标和函数值组合
【发布时间】:2023-03-14 06:11:02
【问题描述】:

当我想绘制 x,y 坐标的 3d 表面及其对应的函数值 z(x,y) 时,我想基本上增加我的数据点。 问题是我的坐标不会单调增加,所以我不能在 Matlab 中使用 2d 插值。

前几行的典型 x,y,z 组合可能如下所示:

15  15  184700.882736683
15  30  215486.921407234
15  45  205691.389050234
15  60  215486.897031495
15  75  209662.528668203
15  90  215486.908134438
15  105 211342.684211922
15  120 215486.920131923
15  135 212270.488286479
15  150 215486.917843900
30  30  275146.369280109
30  45  262639.083693416
30  60  275146.334615114
30  75  267709.604291106
30  90  275146.361678640
30  105 269854.818605481
30  120 275146.331709932
30  135 271039.490475350
30  150 275146.317264820
30  15  235837.965849192

实际上我可以绘制它们的散点图,或者使用 meshgrid 绘制它们的 3d 表面,但是由于我的数据值很少而且我知道它们之间没有值的跳跃,我只是想增加通过插值增加数据点的数量并使我的 3d 表面看起来更精细而不是太粗糙。

我已经阅读了1234,但没有一个专门针对我的问题的解决方案,因为我的案例是 3d 案例。

请不要将我的问题标记为重复和复制;通过谷歌搜索标题。谢谢。

【问题讨论】:

  • 您将z 作为xy 的函数。我们通常称其为 2D 插值。您链接到的那些解决方案有什么问题?
  • 实际上,如果您想尝试 2D 插值,您将得到错误,即您的数据不是单调增加的,并且由于我有 z=f(x,y) 我不知道如何解决这个单调问题出现了。看到 x 是单调的,但 y 不是,z 是函数值,显然可以非单调地变化。
  • 您链接的所有线程都处理非单调数据。
  • @Suever 但是要么没有明确给出解决方案,要么正在谈论 2d 问题 y=f(x),我无法从他们那里得到解决问题的方法。

标签: matlab interpolation


【解决方案1】:

由于您的数据是分散的,您将需要使用griddatascatteredInterpolant 为给定的xy 插入z

这是一个使用griddata的简短示例。

% Sample at 1000 evenly spaced points over the x / y plane.
[xq, yq] = meshgrid(linspace(min(x), max(x), 1000), ...
                    linspace(min(y), max(y), 1000));

zq = griddata(x, y, z, xq, yq);

surf(xq, yq, zq)

% Plot the original points as reference
hold on
plot3(x, y, z, 'o')

【讨论】:

  • 谢谢,这是最好的办法
  • 注意:我认为 TriScatteredInterp 在较新的 Matlab 版本中已重命名为 ScatteredInterpolant
  • @TasosPapastylianou 是的。我的大脑显然没有工作。跟不上 MATLAB 的弃用率。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多