RE: [eigen] SVD with singular matrices |

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]

*To*: <eigen@xxxxxxxxxxxxxxxxxxx>*Subject*: RE: [eigen] SVD with singular matrices*From*: <hamelin.philippe@xxxxxxx>*Date*: Wed, 29 Sep 2010 11:14:06 -0400*Thread-index*: Actf6HVAR9GKmNF1QuOzY/Rc65ep3QAAGRgw*Thread-topic*: [eigen] SVD with singular matrices

Thank you for the follow up. I will use JacobiSVD until then. -----Message d'origine----- De : Listengine [mailto:listengine@xxxxxxxxxxxxxxxxx] De la part de Benoit Jacob Envoyé : 29 septembre 2010 11:10 À : eigen@xxxxxxxxxxxxxxxxxxx Objet : Re: [eigen] SVD with singular matrices Here's a diff for the SVD unit test, exposing the problem. The sorting of eigenvalues isn't the problem, the bidiagonalization is. The most productive thing I can say is: let's declare SVD not-for-exactly-singular-matrices for now, and ... yeah , yeah, make the new SVD happen :-P .. in the meanwhile you have JacobiSVD. Benoit 2010/9/29 Benoit Jacob <jacob.benoit.1@xxxxxxxxx>: > OK, i've attached a compilable variant that also prints the > reconstructed matrix. > > It turns out that the reconstructed matrix is > 1 0 > 1 0 > > I.e. we seem to have a problem with row/column permutations. Which > could be related to the sorting of singvals. > > I'm trying to understand why our unit test is not catching this. It's > true that we're not testing matrices with exactly 0 singvals. > > Benoit > > 2010/9/29 <hamelin.philippe@xxxxxxx>: >> This simple test fails: >> >> bool testSingularMatrixSVD() >> { >> MatrixXd a(2,2), avalidation(2,2); >> unsigned int rows = 2; >> unsigned int cols = 2; >> >> a << 1, 1, >> 0, 0; >> >> Eigen::SVD<MatrixXd> svd(a); >> MatrixXd sigma = MatrixXd::Zero(rows,cols); >> MatrixXd matU = MatrixXd::Zero(rows,rows); >> sigma.diagonal() = svd.singularValues(); >> matU = svd.matrixU(); >> avalidation = matU * sigma * svd.matrixV().transpose(); >> >> cout << "testSingularMatrixSVD() : "; >> if((a).isApprox(avalidation, 1e-12)) >> { >> cout << "Success." << endl; >> return true; >> } >> else >> { >> cout << "Fail." << endl; >> return false; >> } >> >> } >> >> >> -----Message d'origine----- >> De : Listengine [mailto:listengine@xxxxxxxxxxxxxxxxx] De la part de >> Benoit Jacob Envoyé : 29 septembre 2010 10:32 À : >> eigen@xxxxxxxxxxxxxxxxxxx Objet : Re: [eigen] SVD with singular >> matrices >> >> 2010/9/29 <hamelin.philippe@xxxxxxx>: >>> Hello, >>> >>> when updating from eigen2 to eigen3, I found that my pseudo-inverse >>> was not working correctly for singular matrices. However, just >>> replacing SVD with JacobiSVD makes it work. Before looking further, >>> is there any limitation with SVD with singular matrices such as: >>> >>> [1 1;0 0] >> >> JacobiSVD always works, and is always precise. But it's slow for large matrices. >> >> SVD uses the Golub-Kahan bidiagonalization approach. So it's faster, >> but potentially inaccurate for certain singular matrices. >> >> I would be surprised though if the above 2x2 matrix was enough to >> expose problems in it. That would be a bug. Can you make a compilable >> test case? >> >> Thanks, >> Benoit >> >>> >>> Thank you, >>> >>> ------------------------------------ >>> Philippe Hamelin, ing. jr, M. Ing >>> Chercheur / Researcher >>> >>> T: 450-652-8499 x2198 >>> F: 450-652-1316 >>> >>> Expertise robotique et civil >>> Institut de recherche d'Hydro-Québec (IREQ) 1740, boul. >>> Lionel-Boulet Varennes (QC) J3X 1S1, Canada >>> >> >> >> >> >> >

**Follow-Ups**:**Re: [eigen] SVD with singular matrices***From:*Benoit Jacob

**References**:**[eigen] SVD with singular matrices***From:*hamelin.philippe

**Re: [eigen] SVD with singular matrices***From:*Benoit Jacob

**RE: [eigen] SVD with singular matrices***From:*hamelin.philippe

**Re: [eigen] SVD with singular matrices***From:*Benoit Jacob

**Re: [eigen] SVD with singular matrices***From:*Benoit Jacob

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] SVD with singular matrices** - Next by Date:
**Re: [eigen] CDash** - Previous by thread:
**Re: [eigen] SVD with singular matrices** - Next by thread:
**Re: [eigen] SVD with singular matrices**

Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |