Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
7036 Discussions

## SVD function precision

Beginner
775 Views

Hi, currently I am using DGESVD and DGESDD in MKL library, and I have some questions in the precision of those two functions.

For matrices with large condition number (greater than one over machine epsilon), DGESDD won't be able to provide accurate result for small singular values that are less than the largest one multiplied by machine epsilon. More specifically, most small singular values that are less than the largest singular value multiplied by machine epsilon are lifted to a common number that is close to the largest singular value multiplied by machine epsilon. It's also true for the DGESDD function in the LAPACK library. I fully understand that such ill-conditioned matrix is numerically singular. My question is:

Is it expected that DGESDD won't be able to provide accurate result for the small singular values that are less than the largest singular value multiplied by machine epsilon?

From the working paper of LAPACK library "Accurate Singular Values of Bidiagonal Matrices" by James Demmel and W. Kahan, the algorithm implemented in DGESVD is able to provide accurate result even for the small singular values that are less than the largest singular value multiplied by machine epsilon. Is it true for DGESVD in MKL library? Can the implementation of such algorithm in DGESVD fulfill the theoretical prediction in the paper?

I have dived into the codebase of DGESDD in LAPACK library and found some blocks of codes that contribute to the fact that it provides inaccurate result for small singular values in an ill-conditioned matrix. For instance, after bidiagonalization using DGEBRD, DGESDD will scale the matrix and up-round all the diagonal entries that are less than machine epsilon to machine epsilon. I think this would explain why most the small singular values are lifted to the same value.  Does DGESDD in MKL library have similar implementation? If so, what is the rationale behind it?

1 Reply
Beginner
775 Views

I also encounter the same problem. Thanks if anyone could explain.