使用Eigs从一组复杂的特征值中恢复具有最大实部的特征值

时间:2019-06-12 14:28:37

标签: julia sparse-matrix eigenvalue

我正在使用 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可以按预期工作,但是恢复所需输出当然不是必需的。

任何关于正在发生的事情以及可能导致这种情况的见解将不胜感激。

谢谢:)

0 个答案:

没有答案