`eigen` does not support keyword argumwnt `permute` for BigFloat matrix

MWE:

julia> using LinearAlgebra

julia> m = rand(3,3) .|> big |> Hermitian;

julia> using GenericLinearAlgebra

julia> eigen(m);

julia> eigen(m, permute=false);
ERROR: MethodError: no method matching eigen(::Hermitian{BigFloat, Matrix{BigFloat}}; permute::Bool)

Is this a missed support or intentional?

I think it’s intentional, the docstring says the parameters permute and scale are relevant to “general nonsymmetric matrices”, but Hermitian matrices have symmetry. Note that you’d get the same MethodError with Float64 elements, try omitting the .|> big text.

Thanks for the reply! Actually, I can remove Hermitian but have to keep big because I’m trying to compute the eigenvalues of a nearly symmetric matrix with arbitrary precision. But it seems that even when using GenericLinearAlgebra, eigen does not support Matrix{BigFloat}:

julia> n = rand(3,3) .|> big;

julia> eigen(m);
ERROR: MethodError: no method matching eigen!(::Matrix{BigFloat}; permute::Bool, scale::Bool, sortby::typeof(LinearAlgebra.eigsortby))

That’s why I added |>Hermitian. But now it does not support permute again… Do you know if there’s a workaround to this? Thanks!

1 Like

Take a look at GitHub - RalphAS/GenericSchur.jl: Julia package for Schur decomposition of matrices with generic element types I found it useful for BigFloat.

2 Likes

Correct, GenericLinearAlgebra is not a complete extension, which the documentation all but says. issue #57 is relevant to your use case. My earlier point was that the permute and scale keywords are not intended for any symmetric matrix types, and the point is separate from GenericLinearAlgebra extending eigen to Hermitian{BigFloat, Matrix{BigFloat}} (without the keywords of course) but not Matrix{BigFloat}.

2 Likes