[eigen] Re: merged refactor_solve_api

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

2009/11/9 Benoit Jacob <jacob.benoit.1@xxxxxxxxx>:
> Hi,
> I just merged my fork. Here is a summary of the main changes.

I forgot to mention a few important changes: classes and methods were renamed.

PartialLU ---> PartialPivLU
..partialLu() ---> .partialPivLu()

*** IMPORTANT: the lu() method is now a synonym for partialPivLu()
instead of full-pivoting LU.

LU ---> FullPivLU
added .fullPivLu()

ColPivotingHouseholderQR ---> ColPivHouseholderQR
..colPivotingHouseholderQr() ---> .colPivHouseholderQr()
FullPivotingHouseholderQR ---> FullPivHouseholderQR
..fullPivotingHouseholderQr() ---> .fullPivHouseholderQr()


> 1) API changes in solve() methods in all decompositions
> Instead of doing:
>  decomposition.solve(rhs,&result);
> you now do:
>  result = decomposition.solve(rhs);
> As discussed earlier, this is implemented in a way that does not incur
> any overhead. The return value of solve() is an expression like any
> other, the only limitation is that you cannot address its coefficients
> individually.
> 2) More changes in LU module:
> 2a) Same as above for kernel() and image()
> 2b) As discussed earlier: LU no longer tries to detect non-full rank
> and terminate early, instead it behaves like LAPACK, continuing the
> decomposition until an exacly zero pivot is met. Rank-determining
> methods such as rank() and isInvertible() are now computing themselves
> how many pivots are bigger than the "threshold" which you can control
> using setThreshold(). This is much saner than what we did, much closer
> to LAPACK (but more powerful as we do rank determination with custom
> threshold), much more suitable for a uniform API across decompositions
> (the same is coming in QR, SVD, and eigensolvers) and allows the
> unit-tests to always succeed, even with 1000 repetitions!
> 2c) Inversion of tiny matrices: merged the 4x4 fixes, and found the
> "right" API for tiny-inverse-with-check: the user can pass the
> threshold to check the absolute value of the determinant against.
> 3) Changes in tests build system: as discussed earlier, tests are now
> split into smaller executables by default (you can set that to OFF to
> get the old behavior). The benefits are that this takes far less
> memory, allowing to launch concurrent build jobs easily, and that you
> can benefit from a parallel build even when building only 1 test. See
> tests source files for how this is done, basically just replace
> CALL_SUBTEST by CALL_SUBTEST_i to create a channel i, where i can
> currently be any integer between 1 and 16; and if needed you can check
> for the preprocessor symbol EIGEN_TEST_PART_i which also creates the
> corresponding channel. You don't need to change anything in the
> CMakeLists.
> Benoit

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