【问题标题】:Matlab data Interpolation from unstructured 2D grid to a coarse structured 2D gridMatlab 数据从非结构化 2D 网格到粗结构 2D 网格的插值
【发布时间】:2019-02-23 01:41:44
【问题描述】:

我使用 Matlab,我有一个二维精细非结构化网格 (x,y - 900000 x 1, 900000 x1),非结构化网格的每个节点都有一个 (温度) 值 (900000 x 1) 的一维数组!

我已经创建了一个粗略的结构化 2D 网格,我正在尝试找到一种方法将我的数据插入到这个新网格中。 请问,有没有人知道或可以建议一种方法来做到这一点?

欢迎任何建议/帮助!

谢谢,

G.

【问题讨论】:

  • 寻找griddata
  • 感谢 Cris,但 griddata 无法正常工作。数据是一维的,而不是网格(x,y),原因是这是一个大文件:90000 x 1
  • 你有 900k 个点,每个点都有一个 xy 坐标,以及一个值 v。您希望将这些值重新采样到由xqyq 给出的常规网格上。 griddata(x,y,v,xq,yq) 这样做。阅读documentation
  • 克里斯,谢谢!有用!我使用下一种格式:griddata(x,y,v,xq,yq.')
  • 克里斯请解释一下我无法理解的内容。C = griddata(x,y,v,xq,yq),是 xq 中的二维数组,由 yq 组成。如果结构网格是非结构化网格,我可以将 C 转换为一维数组吗?我需要这个 C 和原来的一样……有意义吗?

标签: matlab grid interpolation


【解决方案1】:

假设您有一组由xy 中的坐标定义的点,以及t 中的相应温度值,因此(x(i),y(i)) 处的温度为t(i)。每个点的位置没有结构。

您想查找xqyq 给出的新位置的温度。这些可以形成网格或非结构化。让我们定义一个网格:

[xq, yq] = meshgrid(linspace(0,1,100), linspace(-0.5,0.5,100));

在这个示例网格中,我们有 100 个沿 x 轴介于 0 和 1 之间的样本,以及 100 个沿 y 轴介于 -0.5 和 0.5 之间的样本,总共 10k 个点。

griddata 函数将在新位置的输入数据中进行插值:

tq = griddata(x,y,t, xq,yq);

tq 现在与xqyq 具有相同的形状,即它是一个100x100 的矩阵。要将其转换为与原始列表一样的新列表,只需将其重塑为向量即可。 tq = tq(:) 这样做。或者,在调用 griddata 之前重塑查询位置数组:

xq = xq(:);
yq = yq(:);
tq = griddata(x,y,t, xq,yq);

现在tq 是一个列向量。

【讨论】:

  • 非常感谢克里斯!!!! ...我整天都在努力解决这个问题。我从未在 2D 中使用过列表数据;这让我很困惑,但它似乎对大数据至关重要。谢谢!
猜你喜欢
  • 2016-06-08
  • 1970-01-01
  • 2019-12-08
  • 2016-09-30
  • 2012-11-26
  • 2019-09-10
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
相关资源
最近更新 更多