2011-07-05 269 views
3

排序特徵值矩陣我在列向量形式n個特徵值。因此,存在與這些特徵值對應的N個特徵向量,形成特徵向量矩陣。現在與特徵向量矩陣

,我的工作問題需要我的特徵值列向量進行降序排列。我如何排列特徵向量與特徵值相同的順序以保持對應?

+0

注意當機器號碼Mathematica的使用,'Eigensystem'已經返回降序排列特徵值/向量。 – Szabolcs

+0

Eigensystem將返回特徵值和特徵向量與後者相對應的前者。丹尼爾Lichtblau –

+5

我確實想指出一點,對於一個數值矩陣,所述簡併本徵矢量(即相同的特徵值)'Eigenvectors'並且是線性獨立的,不正交'Eigensystem'返回向量。這比我多一次。但是,你可以在退化集上使用'Orthogonalize'來給你一個正交集。 – rcollyer

回答

10

例如,

m = RandomReal[{0, 1}, {5, 5}]; 
{evals, evecs} = Eigensystem[m]; 
SortBy[Transpose[{evals, evecs}], First] 

,或者如果你希望他們以相同的形式,通過

[email protected][Transpose[{evals, evecs}], First] 

編輯替換最後一行:當我用{evals,evecs}=Eigensystem[m],這是沒有必要的。我只能使用s=Eigensystem[m],然後在我目前有{evals,evecs}的地方使用s

+0

哦,你打我吧;)我會刪除我的回答 –

+0

@Thies一分鐘:)謝謝雖然! – acl

+2

先生,你是一位學者和一名冠軍。 – Bonk

1

可以使用Sort功能根據特徵值特徵系統進行排序。

mat = (#*[email protected]#) &@RandomReal[NormalDistribution[], {4, 4}]; 
eigsys = [email protected]@Eigensystem[mat]; 

Sort的默認行爲是按第一列排序。

+0

我不知道,很好學習。有記錄嗎? – acl

+0

我不確定;這是我觀察到的,在玩過幾個測試用例之後,我很滿意,我一直用它來排列第一列......我傾向於這樣做,直到出現可怕的錯誤時纔去閱讀文檔: ) – abcd

+0

我的印象是,在排序列表中,它實現了一個詞法排序,例如'{1,0,3}'在'{1,0,4}'之前。因此,粗略的檢查,它似乎是排序的第一列,它實際上是由他們全部排序。 – rcollyer

8

雖然排序@acl和@ Yoda的方式(即配對列表中的元素,然後一起排序)是容易的,常用的,我想顯示另一個泛型方法可以輕鬆地進行排序基於一個特定的列表任意數量的列表(list1):

oo = Ordering[list1]; (* this finds the sorting order of list1 *) 
list1[[oo]] 
list2[[oo]] 
list3[[oo]] (* these order some other lists in the same way *) 
相關問題