Обобщенная проблема собственных значений - PullRequest
2 голосов
/ 19 июля 2011

Я пытаюсь преобразовать обобщенную проблему собственных значений в нормальное вычисление собственных значений.

У меня есть этот код:

[V,D,flag] = eigs(A, T);

Теперь я конвертирую это в:

A1 = inv(T)*A;
[V1,D1,flag1] = eigs(A1);

Разве я не должен получить тот же результат? Из того, что я понимаю в документации Matlab, первое уравнение решает:

A*V = B*V*D

и второй решает:

A*V = V*D

я что-то упустил?

Спасибо !!

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Быстрый пример:

A = rand(4); B = randn(4); B = B'*B;         %'# some matrices
[VV,DD] = eig(B\A);
[V,D] = eigs(A,B);
V = bsxfun(@rdivide, V, sqrt(sum(V.*V)));    %# make: norm(V(:,i))==1

Результат:

V =
     -0.64581       0.8378      0.77771      0.50851
      0.70571     -0.51601     -0.32503     -0.70623
      0.27278     0.076874     -0.51777      0.25359
      0.10245      0.16095     -0.14641     -0.42232
VV =
     -0.64581       0.8378     -0.77771     -0.50851
      0.70571     -0.51601      0.32503      0.70623
      0.27278     0.076874      0.51777     -0.25359
      0.10245      0.16095      0.14641      0.42232
D =
       17.088            0            0            0
            0      0.27955            0            0
            0            0     -0.16734            0
            0            0            0     0.027889
DD =
       17.088            0            0            0
            0      0.27955            0            0
            0            0     -0.16734            0
            0            0            0     0.027889

Примечание: Собственные значения не всегда сортируются одинаково, также могут быть разные знаки ... ...1007 *

0 голосов
/ 19 июля 2011

Сначала проверьте, является ли T обратимым.Во-вторых, я уверен, D = D1 и V = V1 с точностью до масштабного коэффициента.Проверьте, совпадает ли каждый столбец V1 с соответствующим столбцом V с точностью до масштабного коэффициента (т.е. посмотрите на V./V1).

...