此问题的变体已被转发到Mathematics Stack Exchange和Computational Science Stack Exchange。可以在这些其他网站上找到其他答案。
这个问题与Getting the mapping for a permutation in MATLAB提出的问题有关。标题基本概括了所有内容。我想知道Matlab中是否有内置函数来确定向量表示的置换是偶数还是奇数。例如,[2 1 4 3 5]是身份置换[1 2 3 4 5]的偶数置换,因为它需要偶数个交换从一个向量到另一个向量。这似乎是人们可能想要经常做的事情,并且可能有内置的功能。人们已经在Web上发布了很长的Matlab文件来实现这一目标。如果我可以让Matlab给我一个排列矩阵,那么我可以采用该矩阵的行列式,但我还没弄清楚如何做到这一点,我也不知道是否有&# 39;快速的方式。
答案 0 :(得分:7)
我认为没有内置功能。但它有一个简单而有效的解决方案: 您的符号应该是向量的置换矩阵的决定因素。
a = [2 1 4 3 5];
I = speye(length(a));
sign = det(I(:,a));
答案 1 :(得分:2)
有趣的是你问一个排列矩阵。这还够吗?
x = [2 1 4 3 5];
y = eye(numel(x));
evenodd = det( y(:,x) );
如果是偶数,则evenodd
的值为1
,如果为奇数,则为-1
。