This bugzilla service is closed. All entries have been migrated to https://gitlab.com/libeigen/eigen

Bug 1732

Summary: JacobiSVD_LAPACKE uses gesvd instead of gejsv
Product: Eigen Reporter: Dirk Toewe <DirkToewe>
Component: SVDAssignee: Nobody <eigen.nobody>
Status: NEW ---    
Severity: Accuracy Problem CC: chtz, gael.guennebaud
Priority: Normal    
Version: 3.3 (current stable)   
Hardware: All   
OS: All   
Whiteboard:

Description Dirk Toewe 2019-07-19 20:07:06 UTC
JacobiSVD_LAPACKE.h uses the LAPACKE method "gesvd" which is afaik not a Jacobi SVD method. LAPACKE does however offer a preconditioned Jacobi SVD method "gejsv" which might be more appropriate. The Jacobi SVD - with the right stopping criterion - offers higher relative accuracy as other SVD methods, see:

http://www.netlib.org/lapack/lawnspdf/lawn15.pdf

Users of Eigen might expect that high relative accuracy and be unpleasently surprised. My suggestion would be switch to "gejsv". "gejsv" is however slower than "gesvd". One remedy to that would be add a Lapacke version of BDCSVD. This way people can choose BDCSVD for performance and JacobiSVD for high relative accuracy.

If those changes are acceptable, I would be willing to file a pull request accordingly.
Comment 1 Nobody 2019-12-04 18:42:57 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/1732.