我有一个通用的实矩阵(即非对称矩阵或Hermitian等),我想在Julia中找到它的右本征向量和相应的左本征向量。
Julia的eigen
函数仅返回正确的特征向量。我可以通过做找到左特征向量
eigen(copy(M'))
但是这需要复制整个矩阵并再次执行特征分解,并且不能保证特征向量的顺序相同。 (copy
是必需的,因为类型eigen
的矩阵没有Adjoint
方法。)
在Python中,我们有scipy.linalg.eigs
,它可以在一次通过中同时计算左右特征向量,这样效率更高,并且可以保证它们的顺序相同。朱莉娅有类似的东西吗?
答案 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