From 84d2c8769592cf2bd7a74eda36c78ea20c00d1d7 Mon Sep 17 00:00:00 2001 From: Jae-Mo Lihm Date: Wed, 28 May 2025 15:20:42 +0200 Subject: [PATCH 1/2] Change default symmetriceigen algorithm --- src/symmetriceigen.jl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/symmetriceigen.jl b/src/symmetriceigen.jl index 7a01cd8c..842d1e17 100644 --- a/src/symmetriceigen.jl +++ b/src/symmetriceigen.jl @@ -10,9 +10,9 @@ eigencopy_oftype(A::Symmetric{<:Complex}, S) = copyto!(similar(parent(A), S), A) default_eigen_alg(A) Return the default algorithm used to solve the eigensystem `A v = λ v` for a symmetric matrix `A`. -Defaults to `LinearAlegbra.DivideAndConquer()`, which corresponds to the LAPACK function `LAPACK.syevd!`. +Defaults to `LinearAlegbra.RobustRepresentations()`, which corresponds to the LAPACK function `LAPACK.syevr!`. """ -default_eigen_alg(@nospecialize(A)) = DivideAndConquer() +default_eigen_alg(@nospecialize(A)) = RobustRepresentations() # Eigensolvers for symmetric and Hermitian matrices function eigen!(A::RealHermSymComplexHerm{<:BlasReal,<:StridedMatrix}; alg::Algorithm = default_eigen_alg(A), sortby::Union{Function,Nothing}=nothing) @@ -37,9 +37,9 @@ matrix `F.vectors`. (The `k`th eigenvector can be obtained from the slice `F.vec Iterating the decomposition produces the components `F.values` and `F.vectors`. `alg` specifies which algorithm and LAPACK method to use for eigenvalue decomposition: -- `alg = DivideAndConquer()` (default): Calls `LAPACK.syevd!`. +- `alg = DivideAndConquer()`: Calls `LAPACK.syevd!`. - `alg = QRIteration()`: Calls `LAPACK.syev!`. -- `alg = RobustRepresentations()`: Multiple relatively robust representations method, Calls `LAPACK.syevr!`. +- `alg = RobustRepresentations()` (default): Multiple relatively robust representations method, Calls `LAPACK.syevr!`. See James W. Demmel et al, SIAM J. Sci. Comput. 30, 3, 1508 (2008) for a comparison of the accuracy and performance of different algorithms. From 871bf321e1b8c099f1fdb7426ea4e7371ca248f4 Mon Sep 17 00:00:00 2001 From: Jae-Mo Lihm Date: Wed, 28 May 2025 15:30:19 +0200 Subject: [PATCH 2/2] Update docstring --- src/symmetriceigen.jl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/symmetriceigen.jl b/src/symmetriceigen.jl index 842d1e17..025d8422 100644 --- a/src/symmetriceigen.jl +++ b/src/symmetriceigen.jl @@ -140,14 +140,18 @@ end Return the eigenvalues of `A`. `alg` specifies which algorithm and LAPACK method to use for eigenvalue decomposition: -- `alg = DivideAndConquer()` (default): Calls `LAPACK.syevd!`. +- `alg = DivideAndConquer()`: Calls `LAPACK.syevd!`. - `alg = QRIteration()`: Calls `LAPACK.syev!`. -- `alg = RobustRepresentations()`: Multiple relatively robust representations method, Calls `LAPACK.syevr!`. +- `alg = RobustRepresentations()` (default): Multiple relatively robust representations method, Calls `LAPACK.syevr!`. See James W. Demmel et al, SIAM J. Sci. Comput. 30, 3, 1508 (2008) for a comparison of the accuracy and performance of different methods. The default `alg` used may change in the future. + +!!! compat "Julia 1.12" + The `alg` keyword argument requires Julia 1.12 or later. + """ function eigvals(A::RealHermSymComplexHerm; alg::Algorithm = default_eigen_alg(A), sortby::Union{Function,Nothing}=nothing) S = eigtype(eltype(A))