Matlab,Cross Product Multi Dim矩阵

时间:2016-04-28 15:57:39

标签: matlab cross-product

我有u1 v1 w1(速度成分)体积数据。 u1的大小是NxNxN(N是100),同样是真的fr1和w1。

我还有一个u2,v2,w2的情况,每个都是大小为NxNxN。这两个数据集都是从TriScatteredInterp和meshgrid获得的。基本上我为这两种情况绘制了流线,现在我想看看这些流线之间存在多少偏差(从案例1到2)。我需要在meshgrid给出的点处找到它们之间的角度。但是交叉产品不会工作(A和B必须至少有一个长度为3的尺寸。)任何建议?非常感谢

1 个答案:

答案 0 :(得分:1)

可以使用

找到角度
angle = atan2(norm(cross(a,b)),dot(a,b))

[使用四象限反正切];但对于我的情况,交叉产品部件将不能用作100x100x100中每个速度组件的大小。

使用Matlab的Concatenate函数,可以将Velocity1和Velocity2的三个组件组合在一起,形成一个大小为NxNxNx3的矩阵。现在对于V1(u1,v1,w1)和V2(u2,v2,w2)的每个三元组/组合,可以在第四维中获取叉积(称为C),这导致矩阵具有大小NxNxNx3。在上面提到的公式中,为了得到交叉乘积结果的大小/范数,我们必须将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