|[eigen] Complete orthogonal decomposition rank computation corner case|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
- To: eigen <eigen@xxxxxxxxxxxxxxxxxxx>
- Subject: [eigen] Complete orthogonal decomposition rank computation corner case
- From: Simon Rutishauser <simon.rutishauser@xxxxxxxxx>
- Date: Thu, 16 Jun 2016 08:41:31 +0200
- Cc: rmlarsen@xxxxxxxxxx
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pix4d.com; s=google; h=from:to:cc:subject:date:message-id:user-agent:mime-version :content-transfer-encoding; bh=dLhRqXQ4ol9hHWg6h9VV3Zn+crhKqpqMseG6Vsb4SxY=; b=AeleHaUgQ871R7sHEhTAfbKePot0ZJ7DxE1DYY6liTQI0F73zSxFytTl06M2CR2Ctl gNctNcCoGlxNU2D5L7ZZYm24cklOT2RgiRzBJd47+PvqgKtiggZ1dsrtr+E4lHtB7sJB XCGdLaSZ1PH0XD603ns+aA8nscr/C0F7fdQ0M=
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.