Eigen Changelog

What's new in Eigen 3.2.4

Jan 22, 2015
  • Fix compilation regression in Rotation2D
  • Bug 920: fix compilation issue with MSVC 2015
  • Bug 921: fix utilization of bitwise operation on enums in first_aligned
  • Fix compilation with NEON on some platforms

New in Eigen 3.2.3 (Dec 17, 2014)

  • Core:
  • Enable Mx0 * 0xN matrix products.
  • Bug 859: fix returned values for vectorized versions of exp(NaN), log(NaN), sqrt(NaN) and sqrt(-1).
  • Bug 879: tri1 = mat * tri2 was compiling and running incorrectly if tri2 was not numerically triangular. Workaround the issue by evaluating mat*tri2 into a temporary.
  • Bug 854: fix numerical issue in SelfAdjointEigenSolver::computeDirect for 3x3 matrices.
  • Bug 884: make sure there no call to malloc for zero-sized matrices or for a Ref without temporaries.
  • Bug 890: fix aliasing detection when applying a permutation.
  • Bug 898: MSVC optimization by adding inline hint to const_cast_ptr.
  • Bug 853: remove enable_if in Ref ctor.
  • Dense solvers:
  • Bug 894: fix the sign returned by LDLT for multiple calls to compute().
  • Fix JacobiSVD wrt underflow and overflow.
  • Bug 791: fix infinite loop in JacobiSVD in the presence of NaN.
  • Sparse:
  • Fix out-of-bounds memory write when the product of two sparse matrices is completely dense and performed using pruning.
  • UmfPack support: fix redundant evaluation/copies when calling compute(), add support for generic expressions as input, and fix extraction of the L and U factors (Bug 911).
  • Improve SparseMatrix::block for const matrices (the generic path was used).
  • Fix memory pre-allocation when permuting inner vectors of a sparse matrix.
  • Fix SparseQR::rank for a completely empty matrix.
  • Fix SparseQR for row-major inputs.
  • Fix SparseLU::absDeterminant and add respective unit test.
  • BiCGSTAB: make sure that good initial guesses are not destroyed by a bad preconditioner.
  • Geometry:
  • Fix Hyperplane::Through(a,b,c) when points are aligned or identical.
  • Fix linking issues in OpenGLSupport.
  • OS, build system and doc:
  • Various compilation fixes including: bug 821, bug 822, bug 857, bug 871, bug 873.
  • Fix many compilation warnings produced by recent compilers including: bug 909.
  • Bug 861: enable posix_memalign with PGI.
  • Fix BiCGSTAB doc example.

New in Eigen 3.2.2 (Dec 17, 2014)

  • Core:
  • Relax Ref such that Ref accepts a RowVectorXf which can be seen as a degenerate MatrixXf(1,N)
  • Fix performance regression for the vectorization of sub columns/rows of matrices.
  • EIGEN_STACK_ALLOCATION_LIMIT: Raise its default value to 128KB, make use of it to assert on maximal fixed size object, and allows it to be 0 to mean "no limit".
  • Bug 839: Fix 1x1 triangular matrix-vector product.
  • Bug 755: CommaInitializer produced wrong assertions in absence of Return-Value-Optimization.
  • Dense solvers:
  • Add a rank() method with threshold control to JacobiSVD, and make solve uses it to return the minimal norm solution for rank-deficient problems.
  • Various numerical fixes in JacobiSVD, including:bug 843, and the move from Lapack to Matlab strategy for the default threshold.
  • Various numerical fixes in LDLT, including the case of semi-definite complex matrices.
  • Fix ColPivHouseholderQR::rank().
  • Bug 222: Make temporary matrix column-major independently of EIGEN_DEFAULT_TO_ROW_MAJOR in BlockHouseholder.
  • Sparse:
  • Bug 838: Fix dense * sparse and sparse * dense outer products and detect outer products from either the lhs or rhs.
  • Make the ordering method of SimplicialL[D]LT configurable.
  • Fix regression in the restart mechanism of BiCGSTAB.
  • Bug 836: extend SparseQR to support more columns than rows.
  • Bug 808: Use double instead of float for the increasing size ratio in CompressedStorage::resize, fix implicit conversions from int/longint to float/double, and fix set_from_triplets temporary matrix type.
  • Bug 647: Use smart_copy instead of bitwise memcpy in CompressedStorage.
  • GMRES: Initialize essential Householder vector with correct dimension.
  • Geometry:
  • Bug 807: Missing scalar type cast in umeyama()
  • Bug 806: Missing scalar type cast in Quaternion::setFromTwoVectors()
  • Bug 759: Removed hard-coded double-math from Quaternion::angularDistance.
  • OS, build system and doc:
  • Fix compilation with Windows CE.
  • Fix some ICEs with VC11.
  • Check IMKL version for compatibility with Eigen
  • Bug 754: Only inserted (!defined(_WIN32_WCE)) analog to alloc and free implementation.
  • Bug 803: Avoid char* to int* conversion.
  • Bug 819: Include path of details.h file.
  • Bug 738: Use the "current" version of cmake project directories to ease the inclusion of Eigen within other projects.
  • Bug 815: Fix doc of FullPivLU wrt permutation matrices.
  • Bug 632: doc: Note that dm2 = sm1 + dm1 is not possible
  • Extend AsciiQuickReference (real, imag, conjugate, rot90)

New in Eigen 3.2.1 (Feb 27, 2014)

  • Changes since 3.2.0:
  • Eigen2 support is now deprecated and will be removed in version 3.3.
  • Core: Bug fix for Ref object containing a temporary matrix.
  • Bug 654: Allow construction of row vector from 1D array.
  • Bug 679: Support cwiseMin() and cwiseMap() on maps.
  • Support conservativeResize() on vectors.
  • Improve performance of vectorwise and replicate expressions.
  • Bug 642: Add vectorization of sqrt for doubles, and make sqrt really safe if EIGEN_FAST_MATH is disabled.
  • Bug 616: Try harder to align columns when printing matrices and arrays.
  • Bug 579: Add optional run-time parameter to fixed-size block methods.
  • Implement .all() and .any() for zero-sized objects
  • Bug 708: Add placement new and delete for arrays.
  • Bug 503: Better C++11 support.
  • Dense linear algebra: ?Bug 689: Speed up some matrix-vector products by using aligned loads if possible.
  • Make solve in FullPivHouseholderQR return least-square solution if there is no exact solution.
  • Bug 678: Fix fullPivHouseholderQR for rectangular matrices.
  • Fix a 0/0 issue in JacobiSVD.
  • Bug 736: Wrong result in LDLT::isPositiveDefinite() for semi-definite matrices.
  • Bug 740: Fix overflow issue in stableNorm().
  • Make pivoting HouseholderQR compatible with custom scalar types.
  • Geometry: Fix compilation of Transform * UniformScaling
  • Sparse matrices: ? Fix elimination tree and SparseQR for fat rectangular matrices.
  • Bug 635: add isCompressed to MappedSparseMatrix for compatibility.
  • Bug 664: Support iterators without operator< in setFromTriplets().
  • Fixes in SparseLU: infinite loop, aliasing issue when solving, overflow in memory allocation, use exceptions only if enabled (bug 672).
  • Fixes in SparseQR: reduce explicit zero, assigning result to map, assert catching non-conforming sizes, memory leak.
  • Bug 681: Uninitialized value in CholmodSupport which may lead to incorrect results.
  • Fix some issues when using a non-standard index type (bug 665 and more)
  • Update constrained CG (unsupported module) to Eigen3.
  • OS and build system: MacOS put OpenGL header files somewhere else from where we expected it.
  • Do not assume that alloca() is 16-byte aligned on Windows.
  • Compilation fixes when using ICC with Visual Studio.
  • Fix Fortran compiler detection in CMake files.
  • Fix some of our tests (bugs 744 and 748 and more).
  • Fix a few compiler warnings (bug 317 and more).
  • Documentation fixes (bugs 609, 638 and 739 and more).

New in Eigen 3.2 (Jul 25, 2013)

  • Dense world:
  • New Ref class allowing to write non templated function taking various kind of Eigen dense objects without copies.
  • New RealQZ factorization and GeneralizedEigenSolver.
  • Add vector-wise normalized and normalize functions, and hasNaN/allFinite members.
  • Add mixed static/dynamic-size .block() functions.
  • Optimize outer products for non rank-1 update operations.
  • Optimize diagonal products (enable vectorization in more cases).
  • Improve robustness and performance in JacobiSVD::solve().
  • Sparse world:
  • New SparseLU module: built-in sparse LU with supernodes and numerical row pivoting (port of SuperLU making the SuperLUSupport module obsolete).
  • New SparseQR module: rank-revealing sparse QR factorization with numerical column pivoting.
  • New COLAMD ordering and unified ordering API.
  • Add support for generic blocks of sparse matrices (read-only).
  • Add conservative resize feature on sparse matrices.
  • Add uniform support for solving sparse systems with sparse right hand sides.
  • Add support for sparse matrix time sparse self-adjoint view products.
  • Improve BiCGSTAB robustness with restart.
  • Support to external libraries:
  • New MetisSupport module: wrapper to the famous graph partitioning library.
  • New SPQRSupport module: wrapper to suitesparse's supernodal QR solver.

New in Eigen 3.2 RC 2 (Jul 20, 2013)

  • Rename DenseBase::isFinite() to allFinite() to avoid a future naming collision
  • Fix an ICE with ICC 11.1

New in Eigen 3.2 RC 1 (Jul 20, 2013)

  • New features:
  • Bug 562: Add vector-wise normalized and normalize functions.
  • Bug 564: Add hasNaN and isFinite members.
  • Bug 579: Add support for mixed static/dynamic-size .block().
  • Bug 588: Add support for determinant in SparseLU.
  • Add support in SparseLU to solve with L and U factors independently.
  • Allow multiplication-like binary operators to be applied on type combinations supported by scalar_product_traits.
  • Bug 596: Add conversion from SparseQR::matrixQ() to a SparseMatrix.
  • Bug 553: Add support for sparse matrix time sparse self-adjoint view products.
  • Accuracy and performance:
  • Improve BiCGSTAB robustness: fix a divide by zero and allow to restart with a new initial residual reference.
  • Bug 71: Enable vectorization of diagonal products in more cases.
  • Bug 620: Fix robustness and performance issues in JacobiSVD::solve.
  • Bug 609: Improve accuracy and consistency of the eulerAngles functions.
  • Bug 613: Fix accuracy of SSE sqrt for very small numbers.
  • Enable SSE with ICC even when it mimics a gcc version lower than 4.2.
  • Add SSE4 min/max for integers.
  • Bug 590 & 591: Minor improvements in NEON vectorization.
  • Bug fixes:
  • Fix HouseholderSequence::conjugate() and ::adjoint().
  • Fix SparseLU for dense matrices and matrices in non compressed mode.
  • Fix SparseMatrix::conservativeResize() when one dimension is null.
  • Fix transposeInpPlace for arrays.
  • Fix handmade_aligned_realloc.
  • Bug 554: Fix detection of the presence of posix_memalign with mingw.
  • Bug 556: Workaround mingw bug with -O3 or -fipa-cp-clone options.
  • Bug 608: Fix sign computation in LDLT.
  • Bug 567: Fix iterative solvers to immediately return when the initial guess is the true solution and for trivial solution.
  • Bug 607: Fix support for implicit transposition from dense to sparse vectors.
  • Bug 611: Fix support for products of the form diagonal_matrix * sparse_matrix * diagonal_matrix.
  • Others:
  • Bug 583: Add compile-time assertion to check DenseIndex is signed.
  • Bug 63: Add lapack unit tests. They are automatically downloaded and configured if EIGEN_ENABLE_LAPACK_TESTS is ON.
  • Bug 563: Assignment to Block is now allowed on non-compressed matrices.
  • Bug 626: Add assertion on input ranges for coeff* and insert members for sparse objects.
  • Bug 314: Move special math functions from internal to numext namespace.
  • Fix many warnings and compilation issues with recent compiler versions.
  • Many other fixes including Bug 230, Bug 482, Bug 542, Bug 561, Bug 564, Bug 565, Bug 566, Bug 578, Bug 581, Bug 595, Bug 597, Bug 598, Bug 599, Bug 605, Bug 606, Bug 615.

New in Eigen 3.2 Beta 1 (Jul 20, 2013)

  • Dense modules:
  • A new Ref class allowing to write non templated function taking various kind of Eigen dense objects without copies.
  • New RealQZ factorization and GeneralizedEigenSolver
  • Optimized outer products for non rank-1 update operations.
  • Sparse modules:
  • New SparseLU module: built-in sparse LU with supernodes and numerical row pivoting (port of SuperLU making the SuperLUSupport module obsolete).
  • New SparseQR module: rank-revealing sparse QR factorization with numerical column pivoting.
  • OrderingMethods: extended with COLAMD ordering and a unified ordering API.
  • Support for generic blocks of sparse matrices.
  • Add conservative resize feature on sparse matrices.
  • Add uniform support for solving sparse systems with sparse right hand sides.
  • Support to external libraries:
  • New MetisSupport module: wrapper to the famous graph partitioning library.
  • New SPQRSupport module: wrapper to suitesparse's supernodal QR solver.
  • Misc:
  • Improved presentation and clarity of Doxygen generated documentation (modules are now organized into chapters, treeview panel and search engine for quick navagitation).
  • New compilation token EIGEN_INITIALIZE_MATRICES_BY_NAN to help debugging.
  • All bug fixes of the 3.1 branch, plus a couple of other fixes (including 211, 479, 496, 508, 552)

New in Eigen 3.1.3 (Jul 20, 2013)

  • Bug 526 - Fix linear vectorized transversal in linspace.
  • Bug 551 - Fix compilation issue when using EIGEN_DEFAULT_DENSE_INDEX_TYPE.
  • Bug 533 - Fix some missing const qualifiers in Transpose
  • Fix a compilation with CGAL::Gmpq by adding explicit internal:: namespace when calling abs().
  • Fix computation of outer-stride when calling .real() or .imag().
  • Fix handmade_aligned_realloc (affected conservativeResize()).
  • Fix sparse vector assignment from a sparse matrix.
  • Fix log(0) with SSE.
  • Fix bug in aligned_free with windows CE.
  • Fix traits of Map

New in Eigen 3.1.2 (Jul 20, 2013)

  • Bug 524 - Pardiso's parameter array does not have to be aligned!
  • Bug 521 - Disable __cpuidex on architectures different that x86 or x86-64 with MSVC.
  • Bug 519 - AlignedBox::dim() was wrong for dynamic dimensions.
  • Bug 515 - Fix missing explicit scalar conversion.
  • Bug 511 - Fix pretty printers on windows.
  • Bug 509 - Fix warnings with gcc 4.7
  • Bug 501 - Remove aggressive mat/scalar optimization (was replaced by mat*(1/scalar) for non integer types).
  • Bug 479 - Use EISPACK's strategy re max number of iters in Schur decomposition.
  • Add support for scalar multiple of diagonal matrices.
  • Forward resize() function from Array/Matrix wrappers to the nested expression such that mat.array().resize(a,b) is now allowed.
  • Windows CE: fix the lack of the aligned_malloc function on this platform.
  • Fix comma initializer when inserting empty matrices.
  • Fix dense=sparse*diagonal products.
  • Fix compilation with m.array().min(scalar) and m.array().max(scalar).
  • Fix out-of-range memory access in GEMV (the memory was not used for the computation, only to assemble unaligned packets from aligned packet loads).
  • Fix various regressions with MKL support.
  • Fix aliasing issue in sparse matrix assignment.
  • Remove stupid assert in blue norm.
  • Workaround a weird compilation error with MSVC.

New in Eigen 3.1.1 (Aug 7, 2012)

  • relicense to MPL2
  • add a EIGEN_MPL2_ONLY build option to generate compiler errors when including non-MPL2 modules
  • remove dynamic allocation for triangular matrix-matrix products of fixed size objects
  • Fix possible underflow issues in SelfAdjointEigenSolver
  • Fix issues with fixed-size Diagonal (sub/super diagonal size computation was wrong)
  • Bug 487 - Geometry module: isometry * scaling compilation error
  • Bug 486 - MKL support: fixed multiple-references linker errors with various decompositions
  • Bug 480 - work around compilation error on Android NDK due to isfinite being defined as a macro
  • Bug 485 - IterativeLinearSolvers: conflict between a typedef and template type parameter
  • Bug 479 - Eigenvalues/Schur: Adjust max iterations count to matrix size
  • Fixed Geometry module compilation under MSVC
  • Fixed Sparse module compilation under MSVC 2005

New in Eigen 3.1.0 (Aug 7, 2012)

  • New features:
  • New set of officially supported Sparse Modules
  • This includes sparse matrix storage, assembly, and many built-in (Cholesky, CG, BiCGSTAB, ILU), and third-party (PaStiX, Cholmod, UmfPack, SuperLU, Pardiso) solvers
  • See this page for an overview of the features
  • Optional support for Intel MKL
  • This includes the BLAS, LAPACK, VML, and Pardiso components
  • See this page for the details
  • Core:
  • New vector-wise operators: *, /, *=, /=
  • New coefficient-wise operators: &&, ||, min(Scalar), max(Scalar), pow, operator/(Scalar,ArrayBase)
  • Decompositions
  • Add incremental rank-updates in LLTand LDLT
  • New SelfAdjointEigenSolver::computeDirect() function for fast eigen-decomposition through closed-form formulas (only for 2x2 and 3x3 real matrices)
  • Optimizations:
  • Memory optimizations in JacobiSVD and triangular solves
  • Optimization of reductions via partial unrolling (e.g., dot, sum, norm, etc.)
  • Improved performance of small matrix-matrix products and some Transform operations
  • Eigen 3.1.0-rc2

New in Eigen 3.0.5 (Aug 7, 2012)

  • Bug 417 - fix nesting of Map expressions
  • Bug 415 - fix return value of Rotation2D::operator*=
  • Bug 410 - fix a possible out of range access in EigenSolver
  • Bug 406 - fix infinite loop/deadlock when using OpenMP and Eigen
  • Changeset 4462 - fix broken asserts revealed by Clang
  • Changeset 4457 - fix description of rankUpdate() in quick reference guide
  • Changeset 4455 - fix out-of-range int constant in 4x4 inverse
  • Bug 398 - fix in slerp: the returned quaternion was not always normalized
  • Changeset 4432 - fix asserts in eigenvalue decompositions
  • Changeset 4416 - fix MSVC integer overflow warning

New in Eigen 3.1.0 Alpha 2 (Feb 7, 2012)

  • New optional support for Intel MKL and other BLAS including: (details)
  • BLAS (arbitrary BLAS)
  • Intel LAPACKE
  • Intel VML (coefficient-wise math operations)
  • Intel PARDISO (sparse direct solver)
  • Dense modules:
  • improved performance of small matrix-matrix products
  • Feature 319 - add a rankUpdate function to LDLt and LLT for updates/downdates
  • Feature 400 - new coefficient wise min/max functions taking one scalar argument
  • Sparse modules:
  • new fast sparse matrix assembly interface from a random list of triplets (see SparseMatrix::setFromTriplets())
  • new shifting feature in SimplicialCholesky (see SimplicialCholeskyBase::setShift())
  • add checks for positive definiteness in SimplicialCholesky
  • improved heuristic to predict the nnz of a saprse*sparse product
  • add support for uncompressed SparseMatrix in CholmodSupport
  • Geometry module:
  • Feature 297 - add ParametrizedLine::intersectionPoint() and intersectionParam() functions
  • Others:
  • fix many warnings and compilation issues with ICC 12 and -strict-ansi
  • fix some ICE with MSVC10
  • add the possibility to disable calls to cpuid (-DEIGEN_NO_CPUID) and other asm directives
  • and many other bug fixes such as: 406, 410, 398, 396, 394, 354, 352, 301,

New in Eigen 3.1.0 Alpha 1 (Feb 7, 2012)

  • Officially supported set of sparse modules. See this page for an overview of the features. Main changes:
  • new SparseCore module equivalent to the old Sparse module, the Sparse module is now a super module including all sparse-related modules
  • the SparseMatrix class is now more versatile and supports an uncompressed mode for fast element insertion
  • the SparseMatrix class now offer a unique and simplified API to insert elements
  • DynamicSparseMatrix has been deprecated (moved into unsupported/SparseExtra)
  • new conservative sparse * sparse matrix product which is also used by default
  • new SparseCholesky module featuring the SimplicialLLT and SimplicialLDLT built-in solvers
  • new IterativeLinearSolvers module featuring a conjugate gradient and stabilized bi-conjugate gradient iterative solvers with a basic Jacobi preconditioner
  • New SelfAdjointEigenSolver::computeDirect() function for fast eigen-decomposition through closed-form formulas (only for 2x2 and 3x3 real matrices)
  • New LLT::rankUpdate() function supporting both updates and down-dates
  • Optimization of reduction via partial unrolling (e.g., dot, sum, norm, etc.)
  • New coefficient-wise operators: && and ||
  • Feature 157 - New vector-wise operations for arrays: *, /, *=, and /=.
  • Feature 206 - Pre-allocation of intermediate buffers in JacobiSVD
  • Feature 370 - New typedefs for AlignedBox

New in Eigen 3.0.4 (Feb 7, 2012)

  • Bug 363 - check for integer overflow in size computations
  • Bug 369 - Quaternion alignment is broken (and more alignment fixes)
  • Bug 354 - Converge better in SelfAdjointEigenSolver, and allow better handling of non-convergent cases
  • Bug 347 - Fix compilation on ARM NEON with LLVM 3.0 and iOS SDK 5.0
  • Bug 372 - Put unsupported modules documentation at the right place
  • Bug 383 - Fix C++11 compilation problem due to some constructs mis-interpreted as c++11 user-defined literals
  • Bug 373 - Compilation error with clang 2.9 when exceptions are disabled
  • Fix compilation issue with QuaternionBase::cast

New in Eigen 3.0.3 (Oct 8, 2011)

  • Fix compilation errors when Eigen2 support is enabled.
  • Fix bug in evaluating expressions of the form matrix1 * matrix2 * scalar1 * scalar2.
  • Fix solve using LDLT for singular matrices if solution exists.
  • Fix infinite loop when computing SVD of some matrices with very small numbers.
  • Allow user to specify pkgconfig destination.
  • Several improvements to the documentation.

New in Eigen 3.0.2 (Aug 27, 2011)

  • Windows.h: protect min/max calls from macros having the same name (no need to #undef min/max anymore).
  • MinGW: fix compilation issues and pretty gdb printer.
  • Standard compliance: fix aligned_allocator and remove uses of long long.
  • MPReal: updates for the new version.
  • Other fixes:
  • fix aligned_stack_memory_handler for null pointers.
  • fix std::vector support with gcc 4.6.
  • fix linking issue with OpenGL support.
  • fix SelfAdjointEigenSolver for 1x1 matrices.
  • fix a couple of warnings with new compilers.
  • fix a few documentation issues.

New in Eigen 3.0.1 (Aug 27, 2011)

  • Fix many bugs regarding ARM and NEON (Now all tests succeed on ARM/NEON).
  • Fix compilation on gcc 4.6
  • Improved support for custom scalar types:
  • Fix memory leak issue for scalar types throwing exceptions.
  • Fix implicit scalar type conversion.
  • Math functions can be defined in the scalar type's namespace.
  • Fix bug in trapezoidal matrix time matrix product.
  • Fix asin.
  • Fix compilation with MSVC 2005 (SSE was wrongly enabled).
  • Fix bug in EigenSolver: normalize the eigen vectors.
  • Fix Qt support in Transform.
  • Improved documentation.

New in Eigen 3.0.0 (Aug 27, 2011)

  • Core:
  • Much better API, that will be supported for many years.
  • Improvements in basic expression template mechanisms allow compilers to generate better code.
  • Now using OpenMP when it is enabled, parallelizing crucial code such as matrix-matrix product.
  • New Array class provides general-purpose arrays and coefficient-wise operations for matrices. Array module merged into Core.
  • Indices are now the size of a pointer, e.g. 64 bit on 64 bit platforms, allowing arbitrarily large matrices and giving faster code (no redundant integer conversions).
  • Cache size parameters can be set at runtime, or are automatically set to sane defaults (using CPUID instruction or equivalent) when first used.
  • Important optimizations in many places, including in matrix-matrix product which is now nearly as fast as Intel MKL and GotoBLAS, including on multi-CPU systems (see above point about OpenMP).
  • Better, more extensible support for various scalar types. All standard integer types (signed and unsigned, from 8 to 64 bits) are supported.
  • Much saner and more comprehensive support for special matrix types: band matrices, permutation matrices...
  • Vectorization:
  • Better vectorization logic.
  • Complex numbers are now vectorized.
  • Better quaternion vectorization.
  • New supported platform: ARM NEON
  • Improved SSE support, including use of SSE4 integer multiplication
  • Updated AltiVec support
  • Decompositions:
  • Much better, uniform solving API
  • Much better, uniform API for setting tolerance threshold in rank-revealing decompositions
  • LU: new partial-pivoting LU, blocking (cache-friendly).
  • QR: new column-pivoting and full-pivoting householder QR; blocking (cache-friendly) of non-pivoting householder QR.
  • SVD: new JacobiSVD (very reliable SVD)
  • Eigenvalues: New general eigensolver, Schur decomposition, etc. Lots of improvements here in speed, reliability and features.
  • Cholesky: rewritten LLT and LDLT, more reliable and blocking (cache-friendly)
  • Householder: new general module for dealing with householder transformations
  • Geometry:
  • Much improved Transform API. It's now much more clear what is an Affine transform, what is a Projective transform, etc.
  • New Umeyama algorithm for finding the Transform mapping one point set to another
  • Allow mapping an array as Quaternion
  • BLAS/LAPACK implementation built on Eigen:
  • That's right, Eigen 3 offers a complete BLAS implementation, passing the BLAS test suite!
  • And also a partial implementation of LAPACK, passing the relevant LAPACK tests.
  • Sparse:
  • Countless improvements there, but it's still not 100% stable.
  • Tests:
  • Much expanded Eigen test suite, now has more than 550 executables
  • Imported the BLAS test suite, as part of ours
  • New 'failtests' check that ill-formed code produces expected compilation errors.