2013-05-03 145 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

相關問題