我想在O(nmr)中得到Julia中对称矩阵的特征值



我是Julia的初学者。我想得到输入对称n乘n矩阵X的r个特征值和特征向量。我听说计算复杂度是O(n^2 r(。

n约为1000-2000,r约为100-1000。如何获得O(nmr(中的特征值和特征向量?

我不是这方面的专家,但我一开始会尝试LinearAlgebra stdlib中的方法。LinearAlgebra.eigen函数专门用于输入矩阵类型SymTridiagonal, Hermitian, Symmetric,允许您指定所需的矢量/值数量:

如果你有一个稠密矩阵A,并且想要最大的r特征值和向量:

(evals, evecs) = eigen(Symmetric(A), 1:r)

如果只需要特征值或特征向量,也可以使用eigvalseigvecs。如果您想节省一些内存,也可以查看eigen!

顺便说一句,使用Symmetric(A)并不能创建一个新的矩阵,它只是围绕A的一个包装,它告诉编译器A是对称的,并且只访问A的对角线以上的部分。

如果LinearAlgebra中的版本是,而不是,那么它可能应该在Julia的github上报告。对于更专业的情况,可能会有更快的实现,但对于一般的对称密集矩阵,stdlib中的实现应该接近最佳。

最新更新