Julia:大型稀疏矩阵的所有特征值

yos*_*uga 3 arrays eigenvalue sparse-matrix julia

我有一个很大的稀疏矩阵,例如 128000×128000 SparseMatrixCSC{Complex{Float64},Int64} 有 1376000 个存储条目。
如何快速获取稀疏矩阵的所有特征值?是否可以 ?

我尝试eigs使用 128000×128000 存储 1376000 个条目,但内核已死。
我在 jupyter 笔记本上使用 16GB 内存和 Julia 1.3.1 的 mac book pro。

Mig*_*uel 5

据我所知(我很想被证明是错误的)没有有效的方法来获得一般稀疏矩阵的所有特征值。

计算矩阵特征值的主要算法是 QR 算法。QR 算法的第一步是将矩阵简化为 Hessenberg 形式(以便在 O(n) 时间内进行 QR 分解)。问题在于,将矩阵简化为 Hessenberg 形式会破坏稀疏性,而您只会得到一个密集矩阵。

还有其他方法来计算矩阵的特征值,如(逆)幂迭代,只需要矩阵向量乘积和求解线性系统,但这些只能给你最大或最小的特征值,当你想要时它们变得昂贵计算所有特征值(它们需要存储“紧缩”的特征向量)。

所以一般来说,现在如果你的矩阵有一些特殊的结构,可能会有一些更好的选择。例如,如果您的矩阵是对称的,那么它的 Hessenberg 形式是三对角的,您可以非常快地计算所有特征值。

TLDR:有可能吗?——一般来说,没有。

PS:我尽量保持简短,但如果您有兴趣,我可以为您提供有关答案任何部分的更多详细信息。