我正在使用 eigs ,以解决稀疏矩阵的广义特征值问题,该问题来自于二次特征值问题的伴随线性化。
简而言之,计算特征值的过程如下:拥有矩阵M,C,K(稀疏且来自波动方程的有限元代码),我将执行以下操作:
qep = PEP([K,C,M]);
E,A = companion(qep);
lambda,vevs = eigs(A,E);
println(maximum(real(lambda)))
这按预期工作,并且如最后一行所示,我对具有最大实际值的特征值感兴趣。
还向我建议,让代码仅计算部分特征值会更快。因此,我尝试了以下方法:
lambda,vevs = eigs(A,E, nev=10, which=:LR)
但是当我这样做时,我收到错误消息:
ERROR: LoadError: ARPACKException: unspecified ARPACK error: 1
Stacktrace:
[1] aupd_wrapper(::Type, ::getfield(Arpack, Symbol("#matvecA!#24")){SparseMatrixCSC{Float64,Int64}}, ::getfield(Arpack, Symbol("##21#28")){SparseMatrixCSC{Float64,Int64}}, ::getfield(Arpack, Symbol("##22#29")), ::Int64, ::Bool, ::Bool, ::String, ::Int64, ::Int64, ::String, ::Float64, ::Int64, ::Int64, ::Array{Float64,1}) at /home/symeon/.julia/packages/Arpack/UiiMc/src/libarpack.jl:49
[2] #_eigs#17(::Int64, ::Int64, ::Symbol, ::Float64, ::Int64, ::Nothing, ::Array{Float64,1}, ::Bool, ::typeof(Arpack._eigs), ::SparseMatrixCSC{Float64,Int64}, ::SparseMatrixCSC{Float64,Int64}) at /home/symeon/.julia/packages/Arpack/UiiMc/src/Arpack.jl:198
[3] (::getfield(Arpack, Symbol("#kw##eigs")))(::NamedTuple{(:nev, :which),Tuple{Int64,Symbol}}, ::typeof(eigs), ::SparseMatrixCSC{Float64,Int64}, ::SparseMatrixCSC{Float64,Int64}) at ./none:0
[4] top-level scope at none:0
[5] include at ./boot.jl:326 [inlined]
[6] include_relative(::Module, ::String) at ./loading.jl:1038
[7] include(::Module, ::String) at ./sysimg.jl:29
[8] exec_options(::Base.JLOptions) at ./client.jl:267
[9] _start() at ./client.jl:436
在这里让我注意,为了找到问题,我也尝试了其他选项,但:SR(最小实部)、: SI(最小虚部)、: LI,:LM 、: SM可以按预期工作,但是恢复所需输出当然不是必需的。
任何关于正在发生的事情以及可能导致这种情况的见解将不胜感激。
谢谢:)