Matlab中矢量定义的交叉积应用矩阵和矢量化

时间:2015-04-27 19:43:08

标签: matlab matrix vector vectorization cross-product

我遇到了一个我无法通过矢量化实现的操作。

假设我想找到由

定义的应用程序矩阵
  

h:X - >交叉(V,X)

其中V是预定矢量(X和V都是3乘1矢量)。

在Matlab中,我会做类似

的事情
M= cross(repmat(V,1,3),eye(3,3)) 

得到这个矩阵。例如,V = [1; 2; 3]产生

M =

 0    -3     2
 3     0    -1
-2     1     0

现在假设我有一个3乘N矩阵

V=[V_1,V_2...V_N]

每列定义自己的跨产品操作。对于N = 2,这是一个天真的尝试找到V列定义的两个交叉乘积矩阵

 V=[1,2,3;4,5,6]'
M=cross(repmat(V,1,3),repmat(eye(3,3),1,2))

结果

V =

     1     4
     2     5
     3     6


M =

     0    -6     2     0    -3     5
     3     0    -1     6     0    -4
    -2     4     0    -5     1     0

虽然我在期待

M =

 0    -3     2     0    -6     5
 3     0    -1     6     0    -4
-2     1     0    -5     4     0

反转2列。

有没有办法在没有for循环的情况下实现这个目标?

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,在处理矩阵时,请务必仔细阅读cross的文档:

它说:

C = cross(A,B,DIM), where A and B are N-D arrays, returns the cross
product of vectors in the dimension DIM of A and B. A and B must
have the same size, and both SIZE(A,DIM) and SIZE(B,DIM) must be 3.

请记住,如果您没有指定DIM,则会自动将其假定为1,因此您需要按照列进行操作。在第一种情况下,您将输入AB都指定为3 x 3矩阵。因此,由于假设DIM=1,输出将是每个的叉积。因此,您希望输出的第i列包含A的第i列和B的第i列的叉积和行数预计为3,列数需要在AB之间匹配。

您获得了预期的结果,因为第一个输入A已经[1;2;3]在列上正确复制了三次。从您的第二段代码开始,V作为第一个输入(A)的期望如下:

V =

     1     1     1     4     4     4
     2     2     2     5     5     5
     3     3     3     6     6     6

但是,当您执行repmat时,您实际上在每列之间交替。事实上,你得到了这个:

V = 

     1     4     1     4     1     4
     2     5     2     5     2     5
     3     6     3     6     3     6

repmat将矩阵拼贴在一起,并指定您想要将V水平平铺三次。这显然不正确。这解释了为什么交换列的原因,因为V的第二,第四和第六列实际上应该出现在最后三列。因此,输入列的排序是输出显示为交换的原因。

因此,您需要重新排序V,以便前三个向量为[1;2;3],然后接下来的三个向量为[4;5;6]。因此,您可以先生成原始V矩阵,然后创建一个新矩阵,使得奇数列首先出现在一组三个中,然后是三个一组中的偶数列:

>> V = [1,2,3;4,5,6].';
>> V = V(:, [1 1 1 2 2 2])

V =

     1     1     1     4     4     4
     2     2     2     5     5     5
     3     3     3     6     6     6

现在将Vcross一起使用并保持相同的第二个输入:

>> M = cross(V, repmat(eye(3), 1, 2))

M =

     0    -3     2     0    -6     5
     3     0    -1     6     0    -4
    -2     1     0    -5     4     0

对我好看!