Восстановление собственного значения с наибольшей действительной частью из набора сложных собственных значений с использованием eigs - PullRequest
0 голосов
/ 12 июня 2019

Я использую 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 работают, как предполагалось, но, конечно, не то, что нужно для того, чтобывосстановите желаемый результат.

Любая информация о том, что происходит и что может быть причиной этого, будет принята с благодарностью.

Спасибо:)

...