I am currently working on a project that involves high-precision computations on real symmetric matrices. Specifically, I need to compute all eigenvalues and, optionally, eigenvectors of these matrices using a quad precision routine.
LAPACK library provides the DSYEVD routine, which computes all eigenvalues and, optionally, eigenvectors of a real symmetric matrix A. However, my computations require quad precision. I have explored the documentation but have not found a direct reference to a quad precision equivalent of DSYEVD.
- Is there a quad precision version of the
DSYEVD routine available in the Julia LinearAlgebra.LAPACK library?
- If it is not directly available, what would be the recommended approach to achieve quad precision eigenvalue computations in Julia?
- Are there any external packages or libraries compatible with Julia that provide such functionality?
1 Like
The GenericLinearAlgebra.jl and GenericSchur.jl packages provide eigensystem methods which will work with Float128 from Quadmath.jl (or BigFloat for even finer precision). They implement straight-forward QR approaches rather than the divide-and-conquer (DC) scheme in DSYEVD, but the advantages of DC are questionable for non-BLAS types.
4 Likes
I attempted to use the GenericLinearAlgebra.LAPACK2.syevd! routine, but it does not accept Matrix{Float128} or Symmetric{Float128, Matrix{Float128}} as input.
Here’s a minimal example of what I tried:
using Random, Quadmath, LinearAlgebra, GenericLinearAlgebra
Random.seed!(123)
A = randn(Float128, 4, 4)
A = Symmetric(A)
GenericLinearAlgebra.LAPACK2.syevd!('N', 'U', A)
This results is an error indicating that syevd! does not support Symmetric Matrix{Float128} types.
What I need is a routine that can handle matrices of type Symmetric{Float128, Matrix{Float128}} and compute their eigenvalues with 128-bit or more precision.
GenericLinearAlgebra provides eigen, eigvals etc. for Hermitian, but not Symmetric. GenericSchur provides them for both.
4 Likes