2013-05-03 147 views
1

这个问题的拼词已被转移到Mathematics Stack ExchangeComputational Science Stack Exchange。在这些其他网站上可能会找到其他答案。在Matlab中有内置函数来确定置换是偶数还是奇数?

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

回答

5

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

a = [2 1 4 3 5]; 
I = speye(length(a)); 
sign = det(I(:,a)); 
+0

太棒了!我从未使用过“speye”。 Computational Science Stack Exchange Beta上的某人发布了一个稍微长一些的需要for循环的解决方案。 – 2013-05-03 13:28:26

+0

speye对这个例子没有多大用处,但是如果你的维度很高,而且你在稀疏域中工作,那么它非常方便。 – 2013-05-03 14:12:55

+0

另一个答案使用了“eye”和“numel”,看起来基本相同。我曾使用过:但从来没有像这样。有些Matlab工作人员正在研究如何工作。 – 2013-05-03 17:29:06

2

有趣的你问一个置换矩阵。这足够吗?

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

evenodd值为1如果连或-1如果奇数。

+0

太棒了!我从来没有使用过像“y(:,x)”这样的技巧。 Computational Science Stack Exchange Beta上的某人发布了一个稍微长一些的需要for循环的解决方案。这里有人发布了一个相同长度的解决方案出现在你的面前,我只能接受一个解决方案。 – 2013-05-03 13:30:16

相关问题