0

我有 u1 v1 w1(速度分量)体积数据。u1 的大小为 NxNxN(N 为 100),v1 和 w1 也是如此。

我还有一个 u2、v2、w2 的案例,每个案例的大小为 NxNxN。这两个数据集都是从 TriScatteredInterp 和 meshgrid 获得的。基本上我为这两种情况绘制了流线,现在我想看看这些流线之间有多少偏差(从案例 1 到 2)。我需要在网格网格给出的点上找到它们之间的角度。但是叉积不起作用(A和B必须至少有一个长度为3的维度。)..有什么建议吗??非常感谢

4

1 回答 1

1

可以使用找到角度

angle = atan2(norm(cross(a,b)),dot(a,b))

[使用四象限反正切];但就我而言,叉积部分不能作为 100x100x100 中每个速度分量的大小。

使用 Matlab 的 Concatenate 函数,可以将 Velocity1 和 Velocity2 的三个分量组合成一个大小为 NxNxNx3 的矩阵。现在对于 V1(u1,v1,w1) 和 V2(u2,v2,w2) 的每个三元组/组合,可以在第 4 维取叉积(称为 C),这导致矩阵的大小为 NxNxNx3。在上面提到的公式中,为了得到叉积结果的大小/范数,我们必须在第 4 维取 C 与 C 本身的点积并将其平方根以获得大小并将其大小再次变为 NxNxN。所以最后它可以像 -

   A = cat(4,u1,v1,w1); % Combine the three components in the 4th dimension
   B = cat(4,u2,v2,w2); % Ditto
   C = cross(A,B,4); % Take the cross products there.
   ang = atan2(sqrt(dot(C,C,4)),dot(A,B,4));

该解决方案由 Roger Stafford 先生(Matlab 网站)提供,所有功劳归于他。

答案可以在这里找到.. http://fr.mathworks.com/matlabcentral/answers/281635-cross-product-multi-dim-data

于 2016-05-01T11:11:25.377 回答