【问题标题】:Interpolate 3d Data in Matlab在 Matlab 中插入 3d 数据
【发布时间】:2015-05-07 11:37:16
【问题描述】:

我有一个 7426x32 二维数据数组,来自 1 度圆柱切片。它包含:X、Y、Z,以及温度、密度、压力等 29 个变量。X 方向有 79 个网格节点,Y 方向有 2 个,Z 方向有 47 个。这是一条“线” Y 方向的细胞体积。数据以这种方式写出:

do Z = 1,47
  do Y = 1,2
    do X = 1,79
      X,Y,Z, then the other 29 variables at each node
    enddo
  enddo
enddo

我需要对变量进行插值以获得每个单元格体积中变量的平均值(产生 3713 个值),将每个变量乘以每个单元格中包含的体积,然后将其相加。我知道我可以在 Matlab 中使用 interp3 函数,但我不确定如何让该函数处理我拥有的数据。

“直觉”告诉我我应该有:

Vq = interp3(A(1:79,1),A(1:79,2),A(1:79,3),A(1:79,30))

获取第 30 列中的变量。但它并没有真正起作用,我不确定它如何与我的数据排列方式一起工作。谁能指出我正确的方向?

非常感谢!

【问题讨论】:

  • 变量A是什么?

标签: matlab interpolation


【解决方案1】:

诀窍在于 interp 系列函数采用 meshgrid 格式的输入坐标和值,因此在这种情况下,前三个参数必须是坐标空间的 3D 矩阵。

您可以使用meshgrid 重构它:

[X,Y,Z] = meshgrid(1:79, 1:2, 1:47);

X、Y 和 Z 中的每一个都将是一个 79x2x47 矩阵,表示各自的坐标。

因此,您可以直接根据您对输入数据的了解来构建它,但直接在数据上使用reshape 会更加健壮和通用,特别是因为您必须在第 30 列执行相同的过程才能放置它转换成相同的格式(你仍然需要知道你有多少个坐标点,但可以通过编程方式为未知数据集计算出来)。

试试这个:

X = reshape(A(:,1), 79, 2, 47);
Y = reshape(A(:,2), 79, 2, 47);
Z = reshape(A(:,3), 79, 2, 47);
col30 = reshape(A(:,30), 79, 2, 47);
Vq = interp3(X,Y,Z,col30,Xq,Yq,Zq);

其中 Xq、Yq 和 Zq 是测试坐标,可以是向量或标量 - 它们不需要采用网格网格格式。请记住,您需要为 29 个变量中的每一个调用 interp3。

它可能不会立即起作用 - 坐标顺序很重​​要,我不确定我是否已将您对变量的描述正确转换为 Matlab 的形式(它会按列索引,因此有时矩阵表示 YXZ 数据,但有时表示 XYZ规则适用,我总是喜欢检查数据以确保我得到正确的数据)。如果不手动检查矩阵以确保它们的排序正确,并酌情置换 reshape 中的 79、2、47 个参数的顺序。

【讨论】:

  • 上面三行也出现了同样的错误。而[X,Y,Z]=... 中的] 应该是)。我自己无法更正。
  • @MWijnand 再次感谢,我修复了所有 ')' 错误,尽管 [X, Y, Z] 语法是有意的 - 分配多个输出。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 2013-10-20
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
相关资源
最近更新 更多