Re: [eigen] Bug in SVD applied to specific matrix sizes

[ Thread Index | Date Index | More Archives ]

On 15 Mar, Jens Andersen wrote:
> Hi
> I have stumbled upon a bug in SVD when applying it to certain matrix sizes.
> The particular problem occured when doing a simple four-point Direct
> Linear Transform in reduced form, providing a matrix of size 8x9.
> In this case an attempt to set a value to an index out of bounds, in
> the array m_sigma.
> The particular code is shown here:
>   // Set up the final bidiagonal matrix or order p.
>   int p = std::min(n,m+1);
>   if (nct < n)
>     m_sigma[nct] = matA(nct,nct);
>   if (m < p)
>     m_sigma[p-1] = 0.0;
> m_sigma has size m, whereas p is set to n=m+1. In this particular case
> m_sigma[8] will be set, but m_sigma's highest index is 7.
> A quick test shows that this will consistently happen whenever the
> number of columns is greater than the number of rows.
> Unfortunately I don't know enough of Eigen's internal to create a
> reasonable fix.

As a workaround (not more) you can compute the SVD of the transposed
matrix.  If    A^T has the SVD  V*Sigma*U^T then A itself has the SVD
U*Sigma*V^T .

Helmut Jarausch

Lehrstuhl fuer Numerische Mathematik
RWTH - Aachen University
D 52056 Aachen, Germany

Mail converted by MHonArc 2.6.19+