# Eigenvalues without sorting LinearAlgrebra.jl

Hello! I calculate the equilibrium points for a continuous dynamical system and then calculate it eigenvalues.
I don’t need to sort these eigenvalues, otherwise I’ll have to literally search through all the phase variables to find out which one/corresponds to a stable/unstable manifold.
As far as I understand, the function from the linear algebra package always sorts them. Are there any analogues or maybe I can disable sorting?

Jacobian my system:

``````using StaticArrays
@inbounds function jacob_TM_(u, p, t)

U(y, p, exp50) = p + p / ( 1.0 + exp50 )
U_y(y, p, exp50) = (50.0 * p * exp50) / (1.0 + exp50)^2
g(E, x, y, p, U_) = exp((p  * U_ * x * E + p) / p)
σ_der(x, p) = exp( (-20.0) * (x - p) )
exp50 = exp(-50.0 * (u - p))

U_ = U(u, p, exp50)
Uy = U_y(u, p, exp50)
g_ = g(u, u, u, p, U_)
σ_deri = σ_der(u, p)

g_plus = 1.0 + g_
g_mult = g_ * U_
g_plus_mult = p * (g_plus)
u1p5 = p * u
Uyu2 = Uy * u

E_E = (-1.0 + ((J * u * g_mult)) / (g_plus) ) / p
E_x = (u1p5 * g_mult) / (g_plus_mult)
E_y = (u1p5 * Uyu2 * g_) / (g_plus_mult)

x_E = -U_ * u
x_x = -1.0 / p - U_ * u
x_y = -Uyu2 * u

y_x = 20.0 * p * σ_deri / (1.0 + σ_deri)^2
y_y = -1.0/p

SMatrix{3,3}(E_E, x_E, 0.0,
E_x, x_x, y_x,
E_y, x_y, y_y)
end
``````

Have you tried this? 1 Like

I have next error

``````MethodError: no method matching eigen(::SMatrix{3, 3, Float64, 9}; sortby=nothing)
Closest candidates are:
eigen(::StaticArray{Tuple{N, M}, T, 2} where {N, M, T}; permute, scale) at C:\Users\Alex\.julia\packages\StaticArrays\a4r2v\src\eigen.jl:421 got unsupported keyword argument "sortby"
eigen(::AbstractMatrix{TA}, !Matched::AbstractMatrix{TB}; kws...) where {TA, TB} at C:\Users\Alex\AppData\Local\Programs\Julia-1.8.5\share\julia\stdlib\v1.8\LinearAlgebra\src\eigen.jl:509
eigen(::AbstractMatrix{T}; permute, scale, sortby) where T at C:\Users\Alex\AppData\Local\Programs\Julia-1.8.5\share\julia\stdlib\v1.8\LinearAlgebra\src\eigen.jl:235
``````

Code:

``````const τ = 0.013;  const τD = 0.080;  const τy = 3.3;  const J = 3.07;  const β = 0.300
const xthr = 0.75; const ythr = 0.4
const α = 1.58; const ΔU0 = 0.305; const U0 = 0.265;
I0 = -1.706
p = [α, τ, τD, τy, J, xthr, ythr, U0, ΔU0, β, I0]

fp_ = [8.337037568242414, 0.7385031015931967, 0.4383397756224628]
jac = jacob_TM_(fp_, p, 0)

eigen(jac, sortby = nothing)
``````

This is perhaps an issue with the `StaticArrays` method:

``````@inline function eigen(A::StaticMatrix; permute::Bool=true, scale::Bool=true)
_eig(Size(A), A, permute, scale)
end
``````

where they don’t include `sortby` as a keyword argument. Meanwhile, you may convert it to a matrix:

``````julia> eigen(Matrix(SMatrix{3,3,Float64}(1:9)), sortby = nothing)
Eigen{Float64, Float64, Matrix{Float64}, Vector{Float64}}
values:
3-element Vector{Float64}:
16.116843969807064
-1.1168439698070436
-5.70069118970987e-16
vectors:
3×3 Matrix{Float64}:
-0.464547  -0.882906   0.408248
-0.570796  -0.23952   -0.816497
-0.677044   0.403865   0.408248
``````

Thank you!
How do I split this data? I want to get values

You may use `eigvals` instead:

``````julia> eigvals(Matrix(SMatrix{3,3,Float64}(1:9)), sortby = nothing)
3-element Vector{Float64}:
16.116843969807064
-1.1168439698070436
-5.70069118970987e-16
``````
1 Like

Thank you!