Собственные значения в MATLAB - PullRequest
8 голосов
/ 20 июля 2010

В MATLAB, когда я запускаю команду [V,D] = eig(a) для симметричной матрицы, наибольшее собственное значение (и связанный с ним вектор) находится в последнем столбце. Однако, когда я запускаю его с несимметричной матрицей, наибольшее собственное значение находится в первом столбце.

Я пытаюсь вычислить центральность собственного вектора, который требует, чтобы я взял вычисление собственного вектора, связанного с наибольшим собственным значением. Поэтому тот факт, что наибольшее собственное значение появляется в двух разных местах, затрудняет мне решение.

Ответы [ 4 ]

15 голосов
/ 20 июля 2010

Что я обычно делаю, это:

[V D] = eig(a);
[D order] = sort(diag(D),'descend');  %# sort eigenvalues in descending order
V = V(:,order);
5 голосов
/ 20 июля 2010

Вам просто нужно найти индекс наибольшего собственного значения в D, что можно легко сделать с помощью функции DIAG для извлечения главной диагонали и функции MAX для получить максимальное собственное значение и индекс, где оно происходит:

[V,D] = eig(a);
[maxValue,index] = max(diag(D));  %# The maximum eigenvalue and its index
maxVector = V(:,index);           %# The associated eigenvector in V

ПРИМЕЧАНИЕ: Поскольку woodchips указывает на , вы можете иметь сложные собственные значения для несимметричных матриц. При работе с комплексным входом X функция MAX использует величину комплексного числа max(abs(X)). В случае элементов равной величины используется фазовый угол max(angle(X)).

4 голосов
/ 20 июля 2010

Обратите внимание, что несимметричные матрицы имеют тенденцию иметь сложные собственные значения.

eig(rand(7))
ans =
       3.2957              
     -0.22966 +    0.58374i
     -0.22966 -    0.58374i
     -0.38576              
      0.49064              
      0.17144 +    0.27968i
      0.17144 -    0.27968i

Также обратите внимание, что eig не возвращает явно отсортированные собственные значения (хотя основной алгоритм имеет тенденцию производить их в почти отсортированном порядке, основываясь нана величину собственного значения), но даже если вы делаете сортировку, вам необходимо понять, как сортировка работает на комплексных векторах.

sort(rand(5,1) + i*rand(5,1))
ans =
      0.42343 +    0.51539i
    0.0098208 +    0.76145i
      0.20348 +    0.88695i
      0.43595 +    0.83893i
       0.8225 +    0.91264i

Сортировка при применении к сложным входам работает на величинукомплексный номер.

1 голос
/ 27 ноября 2014

Если вы заботитесь только о собственном векторе, связанном с наибольшим собственным значением, не лучше ли использовать eigs?

[V, D] = eigs( a, 1, 'lm' ); %// get first eigenvector with largest eigenvalue magnitude.
...