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