How to Use Quad Precision Version of DSYEVD Routine in Julia Linear Algebra LAPACK Library?

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.

  1. Is there a quad precision version of the DSYEVD routine available in the Julia LinearAlgebra.LAPACK library?
  2. If it is not directly available, what would be the recommended approach to achieve quad precision eigenvalue computations in Julia?
  3. 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.

3 Likes