Methods to diagonalize a Matrix{BigFloat}?


#1

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.


#2

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


#3

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


#4

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


#5

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}:
      1.333014778966178347989456524738500823065332531245815992476150525785817496429229+0.000000000000000000000000000000000000000000000000000000000000000000000000000000im
 -2.098139928248123669371251893615527048554936640583159924761505257858174964292295e-01-0.000000000000000000000000000000000000000000000000000000000000000000000000000000im

#6

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.