Commit Graph

9 Commits

Author SHA1 Message Date
Benoit Jacob
d6e88f8155 * add LU unit-test. Seems like we have very good numerical stability!
* some cleanup, and grant me a copyright line on the determinant test.
2008-08-09 19:26:14 +00:00
Benoit Jacob
becbeda50a * reimplement the general case of inverse() on top of LU. Advantages:
- removes much code
  - 2.5x faster (even though LU uses complete pivoting contrary to what
inverse used to do!)
  - there _were_ numeric stability problems with the partial pivoting
approach of inverse(), with 200x200 matrices inversion failed almost
half of the times (overflow). Now these problems are solved thanks to
complete pivoting.

* remove some useless stuff in LU
2008-08-09 15:50:07 +00:00
Benoit Jacob
681e944670 *implement LU solver (solves any rectangular system)
*in test/CMakeLists : modify EI_ADD_TEST so that 2nd argument is
additional compiler flags. used to add -O2 to test_product_large so it
doesn't take forever.
2008-08-09 15:23:54 +00:00
Benoit Jacob
a41f2b4216 * fix bug in SwapWrapper : store the wrapped expression by reference
* optimize setIdentity: when the matrix is large enough it is better to
  setZero() and overwrite the diagonal
* start of LU solver, disabled for now
2008-08-09 04:37:09 +00:00
Benoit Jacob
5f350448e1 - add kernel computation using the triangular solver
- take advantage of the fact that our LU dec sorts the eigenvalues of U
in decreasing order
- add meta selector in determinant
2008-08-07 21:48:21 +00:00
Benoit Jacob
58ba9ca72f LU: remove partial-pivoting path (moderately useful since it's does
not allow to easily get the rank), fix a bug (which could have been
triggered by matrices having coefficients of very different
magnitudes).
Part: add an assert to prevent hard to find bugs
Swap: update comments
2008-08-07 04:31:05 +00:00
Benoit Jacob
09ef7db9d9 Add partial pivoting runtime option to LU.
Note: in fact, inverse() always uses partial pivoting because the algo
currently used doesn't make sense with complete pivoting. No num
stability issue so far even with size 200x200. If there is any problem
we can of course reimplement inverse on top of LU.
2008-08-05 15:43:11 +00:00
Benoit Jacob
79a0feee68 big performance improvement in inverse and LU 2008-08-04 23:34:21 +00:00
Benoit Jacob
c2f8ecf466 * LU decomposition, supporting all rectangular matrices, with full
pivoting for better numerical stability. For now the only application is
determinant.
* New determinant unit-test.
* Disable most of Swap.h for now as it makes LU fail (mysterious).
Anyway Swap needs a big overhaul as proposed on IRC.
* Remnants of old class Inverse removed.
* Some warnings fixed.
2008-08-04 04:45:59 +00:00