Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab中的三维数据插值_Matlab_Interpolation - Fatal编程技术网

Matlab中的三维数据插值

Matlab中的三维数据插值,matlab,interpolation,Matlab,Interpolation,我有一个7426x32二维数组,数据来自一个1deg圆柱形切片。它包含: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 我需要对变量进行插值,以得到每个

我有一个7426x32二维数组,数据来自一个1deg圆柱形切片。它包含: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列中的变量。但它并没有真正起作用,我也不确定它是如何与我的数据排列方式配合使用的。谁能给我指一下正确的方向吗


多谢各位

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

您可以使用
meshgrid
重建此网格:

[X,Y,Z] = meshgrid(1:79, 1:2, 1:47);
然后,X、Y和Z中的每一个都将是代表各自坐标的79x2x47矩阵

因此,您可以直接从您所知道的输入数据来构造它,但直接在数据上使用
重塑
更为稳健和通用,特别是当您必须在第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规则适用,我总是喜欢检查数据,以确保它们正确)。如果不手动检查矩阵,以确保它们的顺序正确,并将
中79、2、47个参数的顺序排列为适当的形状。

变量
A
是什么?上述三行中也会出现相同的错误。
]
中的
[X,Y,Z]=…
应该是
。我自己无法更正它。@mwijand再次感谢,我修复了所有的“')”错误,尽管[X,Y,Z]语法是有意指定多个输出的。干杯