Как можно максимально эффективно вычислить только один собственный вектор для одного собственного значения лямбда = 1 на C ++ - PullRequest
0 голосов
/ 26 октября 2019

С ++ имеет очень эффективный алгоритм для вычисления собственных значений и собственных векторов в библиотеке MKL с функцией dgeev. Но он вычисляет все собственные значения и все левые и правильные собственные векторы.

Результаты примера программы DGEEV

Собственные значения (2,86, 10,76) (2,86, -10,76) (-0,69, 4,70) (-0,69, -4,70)-10,46

левые собственные векторы (0,04, 0,29) (0,04, -0,29) (-0,13, -0,33) (-0,13, 0,33) 0,04 (0,62, 0,00) (0,62, 0,00) (0,69, 0,00)(0,69, 0,00) 0,56 (-0,04, -0,58) (-0,04, 0,58) (-0,39, -0,07) (-0,39, 0,07) -0,13 (0,28, 0,01) (0,28, -0,01) (-0,02, -0,19) (-0,02, 0,19) -0,80 (-0,04, 0,34) (-0,04, -0,34) (-0,40, 0,22) (-0,40, -0,22) 0,18

правые собственные векторы (0,11, 0,17)(0,11, -0,17) (0,73, 0,00) (0,73, 0,00) 0,46 (0,41, -0,26) (0,41, 0,26) (-0,03, -0,02) (-0,03, 0,02) 0,34 (0,10, -0,51) (0,100,51) (0,19, -0,29) (0,19, 0,29) 0,31 (0,40, -0,09) (0,40, 0,09) (-0,08, -0,08) (-0,08, 0,08) -0,74 (0,54, 0,00) (0,54, 0,00) (-0,29, -0,49) (-0,29, 0,49) 0,16

Для больших матриц это занимает много времени. Особенно, если вам нужно вычислить собственные векторы для большого числа матриц.

Поэтому главный вопрос заключается в том, как я могу вычислить только один собственный вектор для реальной матрицы только для одного собственного значения лямбда = 1 настолько быстро, насколько это возможно? Или как я могу решить систему линейных уравнений AE = 0, где A - вещественная матрица, E - матрица идентичности. Собственный вектор существует на 100% и состоит только из действительных чисел.

1 Ответ

0 голосов
/ 26 октября 2019

Вы не можете действительно решить B x = 0 с B = A - I. Это уравнение имеет бесконечно много решений, если A имеет единичное собственное значение.

Для простейшего решения поставьте x(n) = 1 для произвольного n, скажем n = N. Затем используйте первые N-1 уравнения, чтобы найти x(1:N-1). По сути, вам придется решить B' x' = r для x' = x(1:N-1), где B' = B(1:N-1, 1:N-1) и r = -B(1:N-1,N). Это легко сделать с помощью процедуры MKL / LAPACK ?gesv, в которой указаны соответствующие значения для размеров матрицы и начальных размеров.

Обратите внимание, что в зависимости от A, B' также может быть единственным. Тогда вам придется исправить больше x_n компонентов. В крайнем случае, когда A = I, все x_n с являются произвольными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...