# Eigenvector for small non-Hermitian matrices

I have to calculate the eigenvector and eigenvalues for many (more than 60.000) non-Hermitian 4x4 matrices. I know that this can be slightly speed up by means of using LinearAlgebra.LAPACK.geevx! instead of using the eigen() function itself. However, if I would do this in C++ and use the eigen library for C++ (using the compiling option O3 and fastmath) I can even speed up this calculation by a factor 2 … 3. Is there an opportunity to reach the same speed like the C++ eigen library by a Package for instance? Using the option @fastmath in Julia does not change the performance.

1 Like

`StaticArrays` should be better.

2 Likes

Thanks for the answer. But if I haven’t overseen it, `StaticArrays` has no `eigen()` function for non-Hermitian matrices and use than the built-in function of julia, so that result is the same. E.g.,

using BenchmarkTools
using LinearAlgebra
using StaticArrays

m = rand(4,4) + im*rand(4,4);
M = SMatrix{4,4, ComplexF64}(m)
@benchmark eigen(\$m)
@benchmark eigen(\$M)

Related discussion: Allocations when calling eigen for hermitian 3x3 SMatrix

1 Like

Thanks for the link. But this seems to be quite limited to hermitian matrices and only for size of 3x3

Are you perhaps missing a parameter in the SMatrix declaration?

``````SMatrix{4,4,ComplexF64,16}
``````

Is needed I think?

The above mentioned example still works on my PC (julia 1.7.3) even without the 16 in the declaration. Anyway, even if I add this in the declaration, the evaluation time is roughly the same.

`@benchmark eigen(\$m)` leads to

``````BenchmarkTools.Trial: 10000 samples with 1 evaluation.
Range (min … max):  12.680 μs … 258.653 μs  ┊ GC (min … max): 0.00% … 0.00%
Time  (median):     14.110 μs               ┊ GC (median):    0.00%
Time  (mean ± σ):   16.117 μs ±   7.016 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

Memory estimate: 10.23 KiB, allocs estimate: 22.
``````

while for `StaticArrays`, i.e. `@benchmark eigen(\$M)` was used I get

``````BenchmarkTools.Trial: 10000 samples with 1 evaluation.
Range (min … max):  12.849 μs …  11.458 ms  ┊ GC (min … max): 0.00% … 99.67%
Time  (median):     14.216 μs               ┊ GC (median):    0.00%
Time  (mean ± σ):   16.555 μs ± 114.533 μs  ┊ GC (mean ± σ):  6.90% ±  1.00%

Memory estimate: 10.89 KiB, allocs estimate: 24.
``````

which is quite similar