我想在 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)
如果您只需要特征值或特征向量,也可以使用 eigvals
和 eigvecs
。如果您想节省一些内存,还可以查看 eigen!
。
顺便说一句,使用 Symmetric(A)
不会创建新矩阵,它只是 A
的包装器,告诉编译器 A
是对称的,只访问A
即在对角线上方。
如果 LinearAlgebra
中的版本 不是 在这种非常普遍的情况下最快的版本,那么应该在 Julia 的 github 上报告它。对于更特殊的情况可能会有更快的实现,但对于一般的对称密集矩阵,stdlib 中的实现应该接近最佳。
我是 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)
如果您只需要特征值或特征向量,也可以使用 eigvals
和 eigvecs
。如果您想节省一些内存,还可以查看 eigen!
。
顺便说一句,使用 Symmetric(A)
不会创建新矩阵,它只是 A
的包装器,告诉编译器 A
是对称的,只访问A
即在对角线上方。
如果 LinearAlgebra
中的版本 不是 在这种非常普遍的情况下最快的版本,那么应该在 Julia 的 github 上报告它。对于更特殊的情况可能会有更快的实现,但对于一般的对称密集矩阵,stdlib 中的实现应该接近最佳。