我有一个大的稀疏矩阵,例如128000×128000 SparseMatrixCSC{Complex{Float64},Int64}有1376000个存储项。
如何快速获取稀疏矩阵的所有特征值?可能吗?
我用1376000个存储条目尝试了128000×128000的eigs
,但内核死了。
我在jupyter笔记本上使用了16GB内存的mac book pro和Julia 1.3.1。
据我所知(我很想被证明是错的),没有有效的方法可以得到一般稀疏矩阵的所有特征值。
计算矩阵特征值的主要算法是QR算法。QR算法的第一步是将矩阵简化为Hessenberg形式(为了在O(n)时间内进行QR分解)。问题是将矩阵简化为Hessenberg形式会破坏稀疏性,最终得到一个密集矩阵。
还有其他方法来计算矩阵的特征值,如(逆)幂迭代,只需要矩阵向量积和求解线性系统,但这些只给你最大或最小的特征值,当你想计算所有特征值时,它们变得昂贵(它们需要存储通货紧缩的特征值)。
所以一般来说,如果你的矩阵有一些特殊的结构,可能会有一些更好的选择。例如,如果你的矩阵是对称的,那么它的Hessenberg形式是三对角的,你可以非常快地计算所有的特征值。
TLDR:可能吗?-一般来说,不可能。
附言:我尽量简短,但如果你感兴趣,我可以给你答案任何部分的更多细节。