【问题标题】:Julia: eigs() function doesn't return all eigenvaluesJulia:eigs() 函数不会返回所有特征值
【发布时间】:2020-08-24 18:59:35
【问题描述】:

我正在使用 eigs() 函数(来自 Arpack 包)来查找稀疏矩阵的特征值(eigen() 不适用于备用矩阵)。显然,即使在非常简单的情况下,eigs() 也无法找到所有特征值:

using Arpack
M = spdiagm(0 => [1,2,3])
eigs(M, nev = 3)

最后一行的输出是一个仅接触 2 个特征值的向量,“2”和“3”(缺少“1”)。我错过了什么?计算稀疏矩阵的特征值是否有不同的函数(实际的稀疏矩阵比上面的M大很多)。

【问题讨论】:

    标签: arrays julia


    【解决方案1】:

    它实际上在警告时显示:

    julia> eigs(Matrix(M), nev = 3);
    ┌ Warning: Adjusting nev from 3 to 2
    └ @ Arpack c:\JuliaPkg\Julia1.5.0\packages\Arpack\o35I5\src\Arpack.jl:82
    

    查看源代码这最多可以返回LinearAlgebra.checksquare(M) - 1 值。

    您可以尝试使用BandedMatrix 来代替,它也是稀疏的:

    julia> m=BandedMatrix(0=>1:3)
    3×3 BandedMatrix{Int64,Array{Int64,2},Base.OneTo{Int64}}:
     1  ⋅  ⋅
     ⋅  2  ⋅
     ⋅  ⋅  3
    
    julia> eigen(m)
    Eigen{Float64,Float64,Array{Float64,2},Array{Float64,1}}
    values:
    3-element Array{Float64,1}:
     1.0
     2.0
     3.0
    vectors:
    3×3 Array{Float64,2}:
     1.0  0.0  0.0
     0.0  1.0  0.0
     0.0  0.0  1.0
    

    【讨论】:

    • 谢谢!由于实际矩阵远大于 3,并且正如 Mason 所指出的,我不需要所有特征值(绝对不是 LinearAlgebra.checksquare(M)),eigs() 就可以了。
    【解决方案2】:

    eigs 使用迭代方法,该方法仅适用于或鼓励用于大型稀疏矩阵并且只需要少量特征值(与矩阵大小相比较小)。

    您在eigen 中收到的错误消息有点令人遗憾。最好还提到,如果你的数组很小,你应该把它collect 放到一个密集的矩阵中,例如

    julia> using SparseArrays, LinearAlgebra
    
    julia> M = spdiagm(0 => [1,2,3])
    3×3 SparseMatrixCSC{Int64,Int64} with 3 stored entries:
      [1, 1]  =  1
      [2, 2]  =  2
      [3, 3]  =  3
    
    julia> eigen(collect(M))
    Eigen{Float64,Float64,Array{Float64,2},Array{Float64,1}}
    values:
    3-element Array{Float64,1}:
     1.0
     2.0
     3.0
    vectors:
    3×3 Array{Float64,2}:
     1.0  0.0  0.0
     0.0  1.0  0.0
     0.0  0.0  1.0
    

    如果您的矩阵太大而无法放入内存并且您必须使用稀疏矩阵,那么我怀疑您不需要所有特征值。

    【讨论】:

    • 谢谢。你的怀疑是正确的,我真的不需要所有的特征值。似乎这是在少量输入上测试代码无济于事的情况之一。
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2021-04-26
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多