Собственные значения в MATLAB

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

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

8
задан Amro 27 November 2014 в 13:44
поделиться

3 ответа

Вам просто нужно найти индекс наибольшего собственного значения в 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)).

5
ответ дан 5 December 2019 в 06:36
поделиться

Обычно я делаю так:

[V D] = eig(a);
[D order] = sort(diag(D),'descend');  %# sort eigenvalues in descending order
V = V(:,order);
15
ответ дан 5 December 2019 в 06:36
поделиться

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

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

Сортировка, когда применяется к комплексным входам, работает по величине комплексного числа.

4
ответ дан 5 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: