Julia中的左右特征向量

Julia中的左右特征向量,julia,linear-algebra,Julia,Linear Algebra,我有一个一般实矩阵(即非对称或厄米特矩阵等),我想在Julia中找到它的右特征向量和相应的左特征向量 Julia的eigen函数仅返回右特征向量。我可以通过这样做找到左特征向量 eigen(复制(M')) 但这需要复制整个矩阵并再次执行特征分解,并且不能保证特征向量的顺序相同。(有必要进行复制,因为对于伴随类型的矩阵没有特征方法) 在Python中,我们有scipy.linalg.eigs,它可以在一次传递中同时计算左特征向量和右特征向量,效率更高,并且保证它们的顺序相同。Julia中有类似的东

我有一个一般实矩阵(即非对称或厄米特矩阵等),我想在Julia中找到它的右特征向量和相应的左特征向量

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

eigen(复制(M'))

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


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

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

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

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

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

以下是我确认信息的一些来源:

您可以通过
linearagebra.LAPACK
模块访问LAPACK功能。这是一个文档。如果我的矩阵很大且条件不好,这可能是一个合理的数值计算方法吗?如果是这样,这似乎是一个很好的解决方案。在这种情况下,使用\运算符确实更好。请参阅我的更新答案。谢谢,但我应该指出,在我的问题中,我指定了我使用的矩阵不是对称的。在这种情况下,奇异值分解与特征分解不同。为了使它们相等,你需要两个条件,矩阵是对称的,它是半正定的。(为什么?因为SVD中的U和V总是正交矩阵,而对称性是实矩阵具有正交特征向量的条件。)所以这在当时对我没有帮助。