Eigen (original) (raw)

Contents

Overview

Documentation

Requirements

Eigen doesn't have any dependencies other than the C++ standard library.

We use the CMake build system, but only to build the documentation and unit-tests, and to automate installation. If you just want to use Eigen, you can use the header files right away. There is no binary library to link to, and no configured header file. Eigen is a pure template library defined in the headers.

License

Eigen is Free Software. Starting from the 3.1.1 version, it is licensed under the MPL2, which is a simple weak copyleft license. Common questions about the MPL2 are answered in the official MPL2 FAQ.

Earlier versions were licensed under the LGPL3+.

Note that currently, a few features rely on third-party code licensed under the LGPL: constrained_cg. Such features can be explicitly disabled by compiling with the EIGEN_MPL2_ONLY preprocessor symbol defined. Furthermore, Eigen provides interface classes for various third-party libraries (usually recognizable by the <Eigen/*Support> header name). Of course you have to mind the license of the so-included library when using them.

Virtually any software may use Eigen. For example, closed-source software may use Eigen without having to disclose its own source code. Many proprietary and closed-source software projects are using Eigen right now, as well as many BSD-licensed projects.

See the MPL2 FAQ for more information, and do not hesitate to contact us if you have any questions.

Compiler support

Eigen is standard C++98 and so should theoretically be compatible with any compliant compiler. Whenever we use some non-standard feature, that is optional and can be disabled.

Eigen is being successfully used with the following compilers:

Regarding performance, Eigen performs best with compilers based on GCC or LLVM/Clang. See this page for some known compilation issues.

Get support

Need help using Eigen? Try this:

Bug reports

For bug reports and feature requests, please use the issue tracker on GitLab.

Mailing list

Address: eigen@lists.tuxfamily.org

In both cases, you will get a confirmation mail to which you need to reply. If you have any trouble please ask at the eigen-core-team address for help.

The Eigen mailing list can be used for discussing general Eigen development topics. End-user questions are often better asked on the Use our Discord server. Development of specific features is best tracked and discussed on our issue tracker on GitLab.

This mailing list is public and has public archives.

Important: You must subscribe before you may post. Sorry, this is our only way to prevent spam.

Important: After you sent your subscription request, you will receive a confirmation e-mail. Check your spam folder, as these confirmation e-mails are often filtered as spam!

There is also a private mailing list which should only be used if you want to write privately to a few core developers (it is read by Gaël, Christoph, Rasmus, Antonio, David, and Constantino). The address is eigen-core-team at the same lists server as for the Eigen mailing list. You do not need to subscribe (actually, subscription is closed). For all Eigen development discussion, use the public mailing list or the issue tracker on GitLab instead.

Discord Server

Join our Discord server!

Everybody's welcome to discuss Eigen-related topics or just chat. Bugs should still be reported on the issue tracker on GitLab and formal discussions should happen on the mailing list. Discord is an ideal place to ask other users and developers for help.

Contributing to Eigen

Eigen is written and maintained by volunteers. You can contribute in many ways to help: give support to new users, write and improve documentation, helping with bugs and other issues in the issue tracker on GitLab, discussing the design and the API, running tests and writing code. See our page on Contributing to Eigen for pointers to get you started.

Projects using Eigen

Feel free to add yourself! If you don't have access to the wiki or if you are not sure about the relevance of your project, ask at the #Mailing list.

Extensions, numerical computation

Bindings

Science

Robotics and engineering

Computer Graphics, Geometry, Visualization

Mobile apps

KDE (our origins!)

If you are aware of some interesting projects using Eigen, please send us a message (including a link and short description) or directly edit this wiki page!

Credits

The Eigen project was started by Benoît Jacob (founder) and Gaël Guennebaud (guru). Many other people have since contributed their talents to help make Eigen successful. Here's an alphabetical list: (note to contributors: do add yourself!)

Philip Avery Fix bug and add functionality to AutoDiff module
Abraham Bachrach Added functions for cwise min/max with a scalar
Sebastien Barthelemy Fix EIGEN_INITIALIZE_MATRICES_BY_NAN
Carlos Becker Wrote some of the pages of the tutorial
David Benjamin Artwork: the owls
Cyrille Berger Fix error in logic of installation script
Armin Berres Lots of fixes (compilation warnings and errors)
Jose Luis Blanco Build fixes for MSVC and AMD64, correction in docs
Mark Borgerding FFT module
Romain Bossart Updates to Sparse solvers
Kolja Brix Added docs to Householder module, fixes for ARPACK wrapper, KroneckerProduct and GMRES
Gauthier Brun Making a start with a divide-and-conquer SVD implementation
Gabriele Buondonno Vector2d cross product
Philipp Büttgenbach Bug fix when differentiating a one-dimensional spline
Thomas Capricelli Migration to mercurial, Non-linear optimization and numerical differentiation, cron-job to update the online dox
Nicolas Carre Making a start with a divide-and-conquer SVD implementation
Jean Ceccato Making a start with a divide-and-conquer SVD implementation
Vladimir Chalupecky CMake fix
Benjamin Chrétien Bug fix for PolynomialSolver (linear polynomials), various typos
Andrew Coles Fixes (including a compilation error)
Jeff "complexzeros" Spline interpolation with derivatives
Everton Constantino General performance enhancements for PowerPC
Marton Danoczy MSVC compilation fix, support for ARM NEON with Clang 3.0 and LLVM-GCC
Jeff Dean Fix in vectorized square root for small arguments
Georg Drenkhahn CMake and STL fixes
Christian Ehrlicher MSVC compilation fix
Martinho Fernandes Make our aligned allocator support C++11
Daniel Gomez Ferro Improvements in Sparse and in matrix product
Rohit Garg Vectorized quaternion and cross products, improved integer product
Mathieu Gautier QuaternionMap and related improvements
Anton Gladky Visual Studio 2008 and GCC 4.6 compilation fixes
Stuart Glaser Prevent allocations in LU decomposition
Marc Glisse C++11 compilation issues (suffices for literals)
Frederic Gosselin Improve filter for hidden files in CMake
Christoph Grüninger Add SuperLU 5 support
Gaël Guennebaud Core developer
Philippe Hamelin Allow CMake project to be included in another project
Marcus D. Hanwell CMake improvements. Marcus is a developer at Kitware!
David Harmon Arpack support module
Chen-Pang He Many improvements to MatrixFunctions and KroneckerProduct modules
Hauke Heibel Extended matrix functions, STL compatibility, Splines, CMake improvements, and more ...
Christoph Hertzberg Quaternions, shifts for Cholmod, bug fixes, lots of user support on forums and IRC
Pavel Holoborodko Multi-precision support with MPFR C++, bug fixes for non-standard scalar types
Tim Holy Improvements to tutorial, LDLT update and downdate
Intel Back-end to Intel Math Kernel Library (MKL)
Trevor Irons Square root for complex numbers, fix compile errors and mistake in docs
Benoît Jacob Core developer
Bram de Jong Improvement to benchmark suite
Kibeom Kim Implement *= /= * / operations for VectorwiseOp
Moritz Klammler Avoid memory leak when constructor of user-defined type throws exception
Claas Köhler Improvements to Fortran and FFTW in CMake
Alexey Korepanov Add RealQZ class
Igor Krivenko Properly cast constants when using non-standard scalars
Marijn Kruisselbrink CMake fixes
Abhijit Kundu Fix compilation errors in OpenGL demos
Moritz Lenz Allow solving transposed problem with SuperLU
Rasmus Munk Larsen Core Developer
Bo Li Fix bugs in Spline constructor
Sebastian Lipponer MSVC compilation support
Daniel Lowenberg Add SparseView class
David J. Luitz Bug fix for sparse * dense matrix product
Naumov Maks Bug fix in polynomial solver test
Angelos Mantzaflaris Fix to allow IncompleteLUT to be used with MPFR
D J Marcin Fix operator& precedence bug
Konstantinos A. Margaritis AltiVec/VSX, ARM NEON (32-bit/64-bit) and S390x SIMD (ZVector) vectorization
Roger Martin Component-wise arc tangent function
Ricard Marxer Reverse, redux improvements, the count() method, some dox
Vincenzo Di Massa CMake fix
Christian Mayer Early code review and input in technical/design discussions
Frank Meier-Dörnberg MSVC compatibility fixes
Keir Mierle LDLT decomposition and other improvements, help with MPL relicensing
Laurent Montel CMake improvements. Laurent is (with Alexander) one of the CMake gurus at KDE!
Eamon Nerbonne Compilation fixes for win32
Alexander Neundorf CMake improvements. Alexander is (with Laurent) one of the CMake gurus at KDE!
Jason Newton Componentwise tangent functions
Jitse Niesen Matrix functions, large improvements in the Eigenvalues module and in the docs, and more ...
Desire Nuentsa Many improvements to Sparse module: SparseLU, SparseQR, ILUT, PaStiXSupport, …
Jan Oberländer Compatibility with termios.h
Jos van den Oever Compilation fix
Michael Olbrich Early patches, including the initial loop meta-unroller
Simon Pilgrim Optimizations for NEON
Bjorn Piltz Visual C compilation fix
Benjamin Piwowarski Add conservativeResize() for sparse matrices
Zach Ploskey Copy-editing of tutorial
Giacomo Po MINRES iterative solver
Sergey Popov Fix bug in SelfAdjointEigenSolver
Guoqiang QI Several performance improvements for ARM and x86 [MRs].
Manoj Rajagopalan Introduce middleRows() / middleCols(), bug fix for nonstandard numeric types
Stjepan Rajko MSVC compatibility fix
Jure Repinc CMake fixes
Kenneth Frank Riddile Lots of Windows/MSVC compatibility fixes, handling of alignment issues
Richard Roberts Bug fix in selection of MKL Householder QR
Adolfo Rodriguez Prevent allocations in matrix decompositions
Peter Román Support for SuperLU's ILU factorization
Oliver Ruepp Bug fix in sparse matrix product with row-major matrices
Radu Bogdan Rusu Fix compilation warning
C. Antonio Sanchez Core Developer
Guillaume Saupin Skyline matrices
Olivier Saut Typo in documentation
Benjamin Schindler gdb pretty printers
Michael Schmidt Fix in assembly when identifying CPU, Compilation fix connected to min/max
Dennis Schridde New typedefs like AlignedBox3f
Jakob Schwendner Test for unaligned quaternions, Benchmark for Geometry module
Christian Seiler The Tensor module
Martin Senst Bug fix for empty matrices
Sameer Sheorey Fix gdb pretty printer for variable-size matrices
Andy Somerville Functions to get intersection between two ParametrizedLines
Alex Stapleton Help with tough C++ questions
Benoit Steiner Faster matrix multiplication, Tensor module, CUDA
Sven Strothoff Add intersects() method to AlignedBox
Leszek Swirski Fix oversight in installation scripts
Adam Szalkowski Bug fix in MatrixBase::makeHouseholder()
Silvio Traversaro Fix for FindEigen3.cmake
Piotr Trojanek QCC compilation fixes
Anthony Truchet Bugfix in QTransform and QMatrix support
Adolfo Rodriguez Tsourouksdissian Version of JacobiSVD that pre-allocates its resources
David Tellenbach General project maintenance, Continuous Integration, various code contributions
James Richard Tyrer CMake fix
Rhys Ulerich Pkg-config support, improved GDB pretty-printer
Henry de Valence Typo in documentation
Ingmar Vanhassel CMake fix
Michiel Van Dyck Multi-threading documentation bug fix
Scott Wheeler Documentation improvements
Freddie Witherden CMake fixes, allow LevenbergMarquardt to work with non-standard types
Urs Wolfer Fixed a serious warning
Manuel Yguel Bug fixes, work on inverse-with-check, the Polynomial module
Pierre Zoppitelli Making a start with a divide-and-conquer SVD implementation
Jonas Adler Bugfixes for CUDA support

Eigen is also using code that we copied from other sources. They are acknowledged in our sources and in the Mercurial history, but let's also mention them here:

Special thanks to Tuxfamily for the wonderful quality of their services, and the GCC Compile Farm Project that gives us access to many various systems including ARM NEON.

If you are looking for a BibTeX entry to use to cite Eigen in academic papers, see the BibTeX page.