| Commit message (Collapse) | Author | Age |
| |
|
| |
|
|
|
|
| |
Anderson (2000)
|
| |
|
| |
|
|
|
|
|
| |
* move the makeJacobi and make_givens_* to PlanarRotation
* rename applyJacobi* => apply*
|
|
|
|
| |
some convenient features (transpose, adjoint, product)
|
|
|
|
|
|
|
|
|
|
|
|
| |
- support complex numbers
- big rewrite of the 2x2 kernel, much more robust
* Jacobi:
- fix weirdness in initial design, e.g. applyJacobiOnTheRight actually did the inverse transformation
- fully support complex numbers
- fix logic to decide whether to vectorize
- remove several clumsy methods
fix for complex numbers
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
* normalize left Jacobi rotations to avoid having to swap rows
* set precision to 2*machine_epsilon instead of machine_epsilon, we lose 1 bit of precision
but gain between 10% and 100% speed, plus reduce the risk that some day we hit a bad matrix
where it's impossible to approach machine precision
|
|
|
|
|
| |
and make Jacobi and SelfAdjointEigenSolver use it
=> ~ x1.75 speedup for JacobiSVD and x2 for SelfAdjointEigenSolver
|
|
|
|
| |
turns out it's not needed anymore and removing it seems to only increase the precision
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
* add Jacobi (Hestenes) SVD decomposition for square matrices
* add function for trivial Householder
|