[eigen] Complete orthogonal decomposition rank computation corner case

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

This is a multi-part message in MIME format.
Hi list and Rasmus,

I have been playing around with the complete orthogonal decomposition that was recently added to Eigen, 
and I think I have ran into a corner case:

I have a matrix of size 70 where the rank() in the CompleteOrthogonalDecomposition::compute() method is 69,
it thus performs the additional Householder reflections. After those reflections, the rank() method returns 70.

Next I run the pseudoInverse() method, which in consequence skips the applyZAdjointOnTheLeftInPlace() step.
The resulting matrix is completely wrong.

The solution, as far as I can see it, would be to the rank() obtained directly after the QR decomposition 
and then stick with it.

What do you think? I have attached a proposed patch.


P.S. I'd love to provide an example matrix that triggers this behaviour, but unfortunately I only observe 
this corner-case on Eigen 3.2.6 with a backported CompleteOrthogonalDecomposition. So the issues I am 
observing may also have other origins.

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