[eigen] Re: merged refactor_solve_api |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen <eigen@xxxxxxxxxxxxxxxxxxx>
- Subject: [eigen] Re: merged refactor_solve_api
- From: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
- Date: Mon, 9 Nov 2009 14:35:59 -0500
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=u0OutHDOaLR8ukmMo+2iqMAGuCCgz02fLpfwxMWfyvk=; b=uSiezz9oR9xr7TALnVr7+JhM+aPEObPCKqF7Wl9L/1iILAg1RqRQsJdKGQRFWEuZM8 RqFtRc++aSJlANEOsELRmF/em8EJaWqIin3dmoZ76TiwONuXvQVQPPz2+Diqgr6eezlY fTyH1IJU3/b3oijQbPMoh2a7oPdHu6bnUwINg=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=STsDHz3d6SxmxB3bvkH7nfrJjPRtEd8fUU4lBp/CYDc9jkxrX1X23/bAkL38W21lrL Lr3t6sFZ+D3tVtOXKL+eQPwHYOkenmR5kOfYe5KTcgtGubMcQS8fgO+gC1tJ9Qq1fJX4 ToJNBBoZUnjTGHAsuYIgpoE+7tdeHNmM14G4s=
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()
Benoit
>
> 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
>