Methods to diagonalize a Matrix{BigFloat}?


Does anyone know about methods (or packages) that allow to diagonalize a Matrix{BigFloat}?

So far, I have only found (in IterativeSolvers.jl) that powm and invpowm do work with Matrix{BigFloat}, but using them I get only the largest and smallest eigenvectors, and I need all of them; svdl and eiglancz throw MethodErrors.


Would GenericSVD.jl or LinearAlgebra.jl do the trick?


Thanks @ChrisRackauckas, both seem to do what I need.


Which methods of LinearAlgebra and GenericSVD did you use to get all eigenvalues in BigFloat precision?


Don’t know which ones he ended up using, but LinearAlgebra.jl has a generic eigvals. Stuff isn’t documented or exported, but if you poke around you get to it:

julia> using LinearAlgebra

julia> A = big.(rand(2,2))
2×2 Array{BigFloat,2}:
 9.425471326934482529935621641925536096096038818359375000000000000000000000000000e-01  …  7.802185845048341672480773922870866954326629638671875000000000000000000000000000e-01
 5.767098416694038665042398861260153353214263916015625000000000000000000000000000e-01     1.806536534479177280587691711843945086002349853515625000000000000000000000000000e-01

julia> LinearAlgebra.EigenGeneral.eigvals!(A)
2-element Array{Complex{BigFloat},1}:


Both packages work as expected. If you only need the eigenvalues, I think LinearAlgebra.jl is what you need; if you are also interested in the eigenvectors, GenericSVD.jl provides them.