Собственное разложение заставляет меня задуматься о NumPy - PullRequest
0 голосов
/ 23 мая 2018

Я проверяю теорему, что A = Q * Лямбда * Q_inverse, где Q Матрица с собственными векторами, а лямбда - диагональная матрица, имеющая собственные значения в диагонали.

Мой код следующий:

import numpy as np
from numpy import linalg as lg

Eigenvalues, Eigenvectors = lg.eigh(np.array([

    [1, 3],

    [2, 5]


]))

Lambda = np.diag(Eigenvalues)


Eigenvectors @ Lambda @ lg.inv(Eigenvectors)

Что возвращает:

array([[ 1.,  2.],
       [ 2.,  5.]])

не должна ли возвращенная матрица совпадать с исходной матрицей, которая была разложена?

Ваш совет будет оценен.

1 Ответ

0 голосов
/ 23 мая 2018

Вы используете функцию linalg.eigh, которая предназначена для симметричных / эрмитовых матриц, ваша матрица не симметрична.

https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.linalg.eigh.html

Вам необходимо использовать linalg.eig, и вы получите правильный результат:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.eig.html

import numpy as np
from numpy import linalg as lg

Eigenvalues, Eigenvectors = lg.eig(np.array([

[1, 3],

[2, 5]


]))

Lambda = np.diag(Eigenvalues)


Eigenvectors @ Lambda @ lg.inv(Eigenvectors)

возвращает

[[ 1.  3.]
 [ 2.  5.]]

Как и ожидалось.

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