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

I want to obtain eigenvalues of symmetric matrix in Julia in O(nmr)

我是 Julia 的初学者。我想以递增顺序获得输入对称 n 次 n 矩阵 X 的 r 个特征值和特征向量。听说计算复杂度是O(n^2 r).

n在1000-20000左右,r在100-1000左右。如何在 O(nmr) 内获得特征值和特征向量?

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

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

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

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

顺便说一句,使用 Symmetric(A) 不会创建新矩阵,它只是 A 的包装器,告诉编译器 A 是对称的,只访问A 即在对角线上方。

如果 LinearAlgebra 中的版本 不是 在这种非常普遍的情况下最快的版本,那么应该在 Julia 的 github 上报告它。对于更特殊的情况可能会有更快的实现,但对于一般的对称密集矩阵,stdlib 中的实现应该接近最佳。