Commit Graph

1533 Commits

Author SHA1 Message Date
Benoit Jacob
6bb6810c5e merge 2009-08-12 18:25:13 -04:00
Benoit Jacob
2b618a2c16 make jacobi SVD more robust after experimenting with very nasty matrices...
it turns out to be better to repeat the jacobi steps on a given (p,q) pair until it
is diagonal to machine precision, before going to the next (p,q) pair. it's also
an optimization as experiments show that in a majority of cases this allows to find out
that the (p,q) pair is already diagonal to machine precision.
2009-08-12 18:23:39 -04:00
Jitse Niesen
f71f878bab Add support for matrix exponential of floats and complex numbers. 2009-08-12 15:44:22 +01:00
Benoit Jacob
309d540d4a add parentheses; hopefully this solves Koldos MSVC compilation issue... 2009-08-12 10:14:15 -04:00
Benoit Jacob
22d65d47d0 finally, the good approach was two-sided Jacobi. Indeed, it allows
to guarantee the precision of the output, which is very valuable.
Here, we guarantee that the diagonal matrix returned by the SVD is
actually diagonal, to machine precision.

Performance isn't bad at all at 50% of the current householder SVD
performance for a 200x200 matrix (no vectorization) and we have
lots of room for improvement.
2009-08-12 02:35:07 -04:00
Thomas Capricelli
7b922eb634 BoxBOD : oops.. shame on me, i did a mistake in the derivative.... now we need 16
iterations instead of 7693 ;-)
the first test still fails though.
2009-08-12 02:34:22 +02:00
Thomas Capricelli
fd307b8f3f fix a bug in BoxBOD Nist test : we now get the actual value for 'start 2'
'start 1' still fails though :/
2009-08-12 02:27:44 +02:00
Thomas Capricelli
3c675609bf add another Nist test of 'hard' difficutly : Bennett5 2009-08-12 02:13:04 +02:00
Thomas Capricelli
54d09a8122 add another Nist test of 'hard' difficutly : MGH09 2009-08-12 01:50:56 +02:00
Benoit Jacob
ce033ebdfe add EIGEN_DEBUG_VAR 2009-08-11 16:12:34 -04:00
Thomas Capricelli
5ac17b4680 add another Nist test of medium difficutly : MGH17 2009-08-11 20:24:02 +02:00
Gael Guennebaud
afbd73b5cd overload operartor* with a ProductBase such that "scalar * (mat * mat)" is optimized
as one could naturally expect
2009-08-11 15:15:06 +02:00
Gael Guennebaud
a4f6642518 fix issue #36 (missing return *this in Rotation2D 2009-08-11 15:11:47 +02:00
Gael Guennebaud
ea884e6f48 remove #include Bidiagonalization, and add missing ";" 2009-08-11 15:08:03 +02:00
Thomas Capricelli
d1bc9144cb wrapper for lmstr1 and lmstr + eigenization of calling tests 2009-08-10 17:37:27 +02:00
Thomas Capricelli
bb1204a145 wrapper for lmdif1 + eigenization of calling test 2009-08-10 17:16:43 +02:00
Thomas Capricelli
80372c18ee wrapper for lmdif (+test call eigenization) 2009-08-10 16:54:53 +02:00
Thomas Capricelli
4a26baa718 wrapper for hybrj1 2009-08-10 16:32:45 +02:00
Thomas Capricelli
1d53ce8d48 wrapper for hybrj 2009-08-10 16:21:22 +02:00
Thomas Capricelli
120235deef add another (actuallY) difficult NIST test : BoxBOD.
The first try fails, the second one passes, but with a very bad accuracy
(~4 digits only).
anyway, my aim is to check we do not change cminpack while portint, so i
keep this test.
2009-08-10 14:11:55 +02:00
Thomas Capricelli
bcfe874968 add another 'difficult'-rated NIST test, which passes 2009-08-10 13:47:18 +02:00
Thomas Capricelli
7d65bd42eb fix testNistHahn1 : i had swapped x[] and y[].... :/ 2009-08-10 13:46:43 +02:00
Thomas Capricelli
b71aa34946 a Nist test rated 'difficult', which passes. 2009-08-10 13:05:30 +02:00
Thomas Capricelli
9b1130b82a another nist test with difficulty 'leverage', it passes. 2009-08-10 12:49:44 +02:00
Thomas Capricelli
7ecbbc9aa4 another nist test with difficulty 'leverage', this one passes 2009-08-10 12:34:51 +02:00
Thomas Capricelli
1045bc17f5 another nist test ('average' difficulty), which fails. It is disabled until
further notice.
2009-08-10 12:08:31 +02:00
Thomas Capricelli
c7a72958ba add an easy test from the NIST set :
http://www.itl.nist.gov/div898/strd/nls/data/misra1a.shtml
2009-08-10 10:47:55 +02:00
Thomas Capricelli
ec2b9f90a3 hybrd : wrapper + eigenize test 2009-08-10 03:39:50 +02:00
Gael Guennebaud
35b4077a5d merge 2009-08-09 23:11:25 +02:00
Gael Guennebaud
ef55e7f4ce make custom asm directive volatile 2009-08-09 23:09:46 +02:00
Benoit Jacob
216ee335ac LinearVectorization: If the destination isn't aligned,
we have to do runtime checks and we don't unroll, so it's only good for large enough sizes
2009-08-09 22:19:12 +02:00
Benoit Jacob
1f1705868b now you can #define EIGEN_DEBUG_ASSIGN, and all the values in ei_assign_traits are printed 2009-08-09 21:35:13 +02:00
Benoit Jacob
527557672a disable the assembly for fast unaligned stores. indeed, there is a strange bug that is triggered by this code:
#include<Eigen/Core>

int main()
{
  Eigen::Matrix4f m;
  m <<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;
  m.col(0).swap(m.col(1));
  std::cout << m << std::endl;
}

when the fast unaligned stores are used, the column is copied instead of being swapped.
2009-08-09 20:49:55 +02:00
Benoit Jacob
8e08680119 don't depend on uninitialized value 2009-08-09 17:18:42 +02:00
Benoit Jacob
3ed83fa681 * add Jacobi transformations
* add Jacobi (Hestenes) SVD decomposition for square matrices
* add function for trivial Householder
2009-08-09 16:58:13 +02:00
Thomas Capricelli
953c37f8e5 i wonder how useful this really is, but others do this way. Probably
related to doxygen.
2009-08-09 05:14:45 +02:00
Thomas Capricelli
50c192961c eigenize lmder + some other small fixes 2009-08-09 05:07:59 +02:00
Thomas Capricelli
a6625f22d4 eigenize the test for lmder1, clean functor stuff.
(and check the tests still pass, of course, that's the whole point..)
2009-08-09 03:54:36 +02:00
Thomas Capricelli
5e4cf6cae1 oops.. use the template paramater instead of hard coding 'double' 2009-08-09 03:34:32 +02:00
Thomas Capricelli
ceeb023ff2 use template parameter Scalar instead of VectorType, fix a segfault. 2009-08-09 03:33:04 +02:00
Thomas Capricelli
7db4052749 eigenize the test a little more 2009-08-09 03:16:24 +02:00
Thomas Capricelli
f19eda7cf6 first test for a basic wrapper (and only wrapper!) for cminpack functions 2009-08-09 03:07:34 +02:00
Thomas Capricelli
2b9f110639 actually use eigen include file 2009-08-09 01:12:14 +02:00
Gael Guennebaud
fe813911f2 make LU::solve() not to crash when rank=0 2009-08-09 00:06:53 +02:00
Benoit Jacob
5f8d58f36a fix bug in sorting of singular values 2009-08-09 00:05:38 +02:00
Thomas Capricelli
b695113a81 Add all other file from cminpack/examples as tests.
Important : one test was failing because cminpack-1.0.2 does x[3]=1. on x
which is of size 3. Probably because fortran indices are shifted wrt to C
indices and someone forgot to fix this one.

This is correct in this commit and this is the only change I've done on files
from cminpack examples.

(i've also reported the bug to cminpack author)
2009-08-08 23:41:54 +02:00
Thomas Capricelli
d646d99366 Start of module "NonLinear". We start out of cminpack-1.0.2
(http://devernay.free.fr/hacks/cminpack.html)
The first test is adapted from the example/ directory.
Some stuff is hard coded for our initial tests.
2009-08-08 22:18:48 +02:00
Thomas Capricelli
b10637be50 add basic .hgignore file for most common generated/temporary files 2009-08-08 21:42:14 +02:00
Gael Guennebaud
f5e1c896c7 replace custom rank one update in LU by an expression 2009-08-08 00:01:43 +02:00
Gael Guennebaud
d1dc088ef0 * implement a second level of micro blocking (faster for small sizes)
* workaround GCC bad implementation of _mm_set1_p*
2009-08-07 11:09:34 +02:00