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