朱莉娅中的左右特征向量

时间:2019-05-20 05:15:56

标签: julia linear-algebra

我有一个通用的实矩阵(即非对称矩阵或Hermitian等),我想在Julia中找到它的右本征向量和相应的左本征向量。

Julia的eigen函数仅返回正确的特征向量。我可以通过做找到左特征向量

eigen(copy(M'))

但是这需要复制整个矩阵并再次执行特征分解,并且不能保证特征向量的顺序相同。 (copy是必需的,因为类型eigen的矩阵没有Adjoint方法。)

在Python中,我们有scipy.linalg.eigs,它可以在一次通过中同时计算左右特征向量,这样效率更高,并且可以保证它们的顺序相同。朱莉娅有类似的东西吗?

2 个答案:

答案 0 :(得分:2)

左特征向量可通过将右特征向量形成的矩阵求逆来计算:

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

答案 1 :(得分:1)

我使用SVD分解将一个矩阵分解为3个矩阵USV'=M。U矩阵按列包含左特征向量,V包含右特征向量,S与特征值的平方成对角线。

请注意,当且仅当A是对称的(如在PCA中,在相关矩阵上不明确地使用两者)且U必须为正定时,U = inv(V)。

以下是一些我确认了我的信息的消息来源: https://www.cc.gatech.edu/~dellaert/pubs/svd-note.pdf https://en.wikipedia.org/wiki/Singular_value_decomposition