This is a maintenance release with few fixes of compilation and performance regressions, some doxygen documentation improvements, and the addition of transpose, adjoint, conjugate methods to SelfAdjointView to ease writing generic code. For more details, look at the
Changelog.

This is a maintenance release with few bug fixes and performance regressions since the first release of the 3.3 series. This release also includes better cmake support (imported targets, relocatable package). For more details, look at the
Changelog.

The API is extremely clean and expressive while feeling natural to C++ programmers, thanks to expression templates.

Implementing an algorithm on top of Eigen feels like just copying pseudocode.

Eigen has good compiler support as we run our test suite against many compilers to guarantee reliability and work around any compiler bugs. Eigen also is standard C++98 and maintains very reasonable compilation times.

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: SimplicialCholesky, AMD ordering, and 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.

Bug reports

Mailing list

To subscribe, send a mail with subject subscribe to eigen-request@lists.tuxfamily.org

To unsubscribe, send a mail with subject unsubscribe to eigen-request@lists.tuxfamily.org

The Eigen mailing list can be used for discussing general Eigen development topics. End-user questions are often better asked on the Users Forum. Development of specific features is best tracked and discussed on our Bugzilla. See this page.

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 Benoît, Gaël and Jitse). 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 Bugzilla instead.

IRC Channel

Everybody's welcome to discuss Eigen-related topics or just chat. Some quick Eigen development chat happens over IRC, but the main place for Eigen development discussion remains the Eigen mailing list. Some user support also happens over IRC, but the main place for Eigen user support is the Users Forum.

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 bugzilla, 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

Google's TensorFlow is an Open Source Software Library for Machine Intelligence

Google's Ceres solver is a portable C++ library that allows for modeling and solving large complicated nonlinear least squares problems.

The Manifold ToolKit MTK provides easy mechanisms to enable arbitrary algorithms to operate on manifolds. It also provides a Sparse Least Squares Solver (SLoM) and an Unscented Kalman Filter (UKFoM).

CppNumericalSolvers is a lightweight header-only library for non-linear optimization including various solvers: CG, L-BGFS-B, CMAes, Nelder-Mead.

GTSAM is a library implementing smoothing and mapping (SAM) in robotics and vision, using factor graphs and Bayes networks.

GINESTRA, a semiconductor device simulator with a focus on advanced dielectric materials and interfaces.

G+Smo, an open-source library for geometric design and numerical simulation with isogeometric analyis.

FlexibleSUSY, a spectrum generator which calculates the masses of elementary particles.

The ATLAS experiment at the LHC (Large Hadron Collider) at CERN is using Eigen, as reported in this article, noting "Eigen was chosen since it offered the largest performance improvements for ATLAS use cases of the options investigated."

The Large Survey Synoptic Telescope (website; trac) is a project to build a 3.2Mpixel camera on an 8.4m telescope and survey the entire visible sky every three days.

BTK is a Biomechanical ToolKit, licensed under BSD whose primary goal is to propose a set of tools for the analysis of the human body motion which is independent of any acquisition system. It proposes bindings for Matlab/Octave and Python, and a GUI software called Mokka to visualize/analyze 3D/2D motion capture data.

libpointmatcher is a "Iterative Closest Point" library for 3D mapping in robotics.

RobOptim is a modern, Open-Source, C++ library for numerical optimization applied to robotics.

Koffice2 (KDE's office suite), in particular Krita, the painting and image editing module. Eigen is also used a bit by KSpread, the spreadsheet module, for matrix functions such as MINVERSE, MMULT, MDETERM.

If you are aware of some interesting projects using Eigen, please send us a message 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!)