3

此问题的变体已交叉发布到数学堆栈交换计算科学堆栈交换。可以在这些其他站点上找到其他答案。

这个问题与Getting the mapping for a permutation in MATLAB中提出的问题有关。标题基本概括了所有内容。我想知道Matlab中是否有一个内置函数来确定向量表示的排列是偶数还是奇数。例如,[2 1 4 3 5] 是恒等排列 [1 2 3 4 5] 的偶排列,因为从一个向量到另一个向量需要偶数交换。这似乎是人们可能想要经常做的事情,并且可能有一个内置函数。人们已经在网上发布了相当长的 Matlab 文件来完成此操作。如果我能让 Matlab 给我一个置换矩阵,那么我可以取那个矩阵的行列式,但是我还没有想出如何做到这一点,也不知道是否有快速的方法。

4

2 回答 2

7

我不认为有一个内置的功能。但它有一个简单有效的解决方案:您的符号应该是向量置换矩阵的行列式。

a = [2 1 4 3 5];
I = speye(length(a));
sign = det(I(:,a));
于 2013-05-03T03:30:10.573 回答
2

有趣的是,您询问置换矩阵。这足够了吗?

x = [2 1 4 3 5];
y = eye(numel(x));
evenodd = det( y(:,x) );

的值evenodd1偶数还是-1奇数。

于 2013-05-03T03:28:14.790 回答