Левый и правый собственные векторы в Юлии - PullRequest
2 голосов
/ 20 мая 2019

У меня есть общая вещественная матрица (т.е. не симметричная или эрмитова и т. Д.), И я хотел бы найти ее правые собственные векторы и соответствующие левые собственные векторы в Юлии.

Функция Джулии eigen возвращает только правильные собственные векторы. Я могу найти левые собственные векторы, выполнив

eigen(copy(M'))

но это требует копирования всей матрицы и повторного выполнения собственного разложения, и нет никакой гарантии, что собственные векторы будут в том же порядке. (copy необходим, потому что не существует метода eigen для матриц типа Adjoint.)

В Python у нас есть scipy.linalg.eigs, который может вычислять левый и правый собственные векторы одновременно за один проход, что более эффективно и гарантирует, что они будут в одном и том же порядке. Есть ли что-то похожее в Юлии?

1 Ответ

2 голосов
/ 21 мая 2019

Левые собственные векторы можно вычислить, взяв обратную матрицу, образованную правыми собственными векторами:

using LinearAlgebra   
A = [1 0.1; 0.1 1]
F = eigen(A)
Q = eigvecs(F) # right eigenvectors 
QL = inv(eigvecs(F)) # left eigenvectors 
Λ = Diagonal(eigvals(F))
# check the results
A * Q ≈ Q * Λ # returns true
QL * A ≈  Λ * QL # returns true, too
# in general we have:
A ≈ Q * Λ * inv(Q)

В приведенном выше примере QL - левые собственные векторы.

Если левые собственные векторы применяются к вектору, предпочтительно вычислять Q \ v вместо inv(QL)*v.

...