Hi,
currently JacobiSVD cannot compute a thin factorization with a fixed
number of columns. This is because the 'thin' status is provided at
runtime while fixed dimensions have to be known at compile-time.
However, a typical use case for JacobiSVD is to solve for a
Matrix<scalar, Dynamic or large_value, small_value> matrix with a
small fixed number of columns but many rows.
I see three options:
One option would be to relax the JacobiSVD's matrix types for the U
factor to always use a dynamic number of columns, but keep
MaxRowsAtCompileTime for the max column size to keep static allocation
when possible. The drawback is that we cannot exploit a fixed number
of columns for unrolling or other optimizations.
This last limitation could be addressed by instancing the code twice
(thin and full), and do a dynamic branching.
The last option I see, and perhaps my favorite, would be to add a
ThinJacobiSVD class (on top of the general JacobiSVD) that would
always compute the thin U and thin V. This variant would be ideal for
solving: it would prevent the need to add ComputeThinU|ComputeThinV
every time. I'm pretty sure it would cover 90% of the use cases. Of
course we would also add a .thinJacobiSVD() member to MatrixBase.
Any opinion?
cheers,
Gael, who is trying to restart some dynamism in Eigen's development;)