Difference between revisions of "Main Page"

From Eigen
Jump to: navigation, search
(Mailing list)
(Projects using Eigen: Added Quantum++)
 
(200 intermediate revisions by 20 users not shown)
Line 1: Line 1:
<div style="float:left; margin: 0 2em 1em 0">
+
<xh1 style="border:none;font-style:italic;font-size:1.5em;text-align:center">Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.</xh1>
 +
 
 +
<div class="mainpage" style="float:left; margin: 0 0.5em 1em 0; width:13em">
 
__TOC__
 
__TOC__
 
</div>
 
</div>
  
<div class="left" style="background-color: #E9F0FF;padding:3pt 3pt 3pt 3em;font-size: 8pt">
+
<div style="margin-left:10em">
Date: March 19, 2011
+
<table>
<div style="font-size: 12pt">
+
<tr>
Eigen [[3.0|3.0.0 released!]]
+
<td style="vertical-align:top;padding-right:0.5em">
</div>
+
<xh2><a href="http://eigen.tuxfamily.org/index.php?title=Special%3AAllPages&from=&to=&namespace=100"> Announcements </a></xh2>
</div>
+
<news rows="5" title="Announcements" category="News">
<div class="left" style="background-color: #E0FFD9;padding:3pt 3pt 3pt 3em;font-size: 8pt">
+
</news>
Date: July 16, 2010
+
</td>
<div style="font-size: 12pt">
+
<td style="vertical-align:top;border-left:solid 1px black;padding-left:1em">
Eigen 2.0.15 released!
+
<xh2>Get it</xh2>
</div>
+
 
For details, see the [[ChangeLog]].
+
The '''latest stable release''' is Eigen 3.3.7. Get it here:
</div>
+
[http://bitbucket.org/eigen/eigen/get/3.3.7.tar.bz2 tar.bz2],
<br/>
+
[http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz tar.gz],
<div style="font-size: 12pt">
+
[http://bitbucket.org/eigen/eigen/get/3.3.7.zip zip].
<i>
+
[[ChangeLog#Eigen_3.3.7|Changelog.]]
Eigen is a C++ template library for linear algebra: matrices, vectors, and related algorithms.
+
 
</i>
+
The '''latest 3.2.10 (previous series) release''' is Eigen 3.2.10. Get it here:
 +
[http://bitbucket.org/eigen/eigen/get/3.2.10.tar.bz2 tar.bz2],
 +
[http://bitbucket.org/eigen/eigen/get/3.2.10.tar.gz tar.gz],
 +
[http://bitbucket.org/eigen/eigen/get/3.2.10.zip zip].
 +
[[ChangeLog#Eigen_3.2.10|Changelog.]]
 +
<!--
 +
The '''latest development release''' is Eigen [[3.4|3.4-alpha1]]. Get it here:
 +
[http://bitbucket.org/eigen/eigen/get/3.4-alpha1.tar.bz2 tar.bz2],
 +
[http://bitbucket.org/eigen/eigen/get/3.4-alpha1.tar.gz tar.gz],
 +
[http://bitbucket.org/eigen/eigen/get/3.4-alpha1.zip zip].
 +
[[ChangeLog#Eigen_3.4-alpha1|Changelog.]]
 +
-->
 +
 
 +
The '''unstable''' source code from the '''development branch''' is there:
 +
[http://bitbucket.org/eigen/eigen/get/default.tar.bz2 tar.bz2],
 +
[http://bitbucket.org/eigen/eigen/get/default.tar.gz tar.gz],
 +
[http://bitbucket.org/eigen/eigen/get/default.zip zip].
 +
 
 +
To check out the Eigen repository using [http://www.selenic.com/mercurial/wiki/ Mercurial], also known as "hg", do:
 +
hg clone https://bitbucket.org/eigen/eigen/
 +
 
 +
<!-- Looking for the outdated Eigen2 version? Check it [[Eigen2|here]]. -->
 +
There is also an official git mirror on github: https://github.com/eigenteam/eigen-git-mirror.
 +
 
 +
&#91; [https://bitbucket.org/eigen/eigen/downloads/ other downloads] &#93;
 +
&#91; [https://bitbucket.org/eigen/eigen/src/ browse the source code] &#93;
 +
</td>
 +
</tr>
 +
</table>
 
</div>
 
</div>
 +
  
 
{{clear}}
 
{{clear}}
Line 29: Line 60:
 
* '''[[Versatility|Eigen is versatile]].'''
 
* '''[[Versatility|Eigen is versatile]].'''
 
** It supports all matrix sizes, from small fixed-size matrices to arbitrarily large dense matrices, and even sparse matrices.
 
** It supports all matrix sizes, from small fixed-size matrices to arbitrarily large dense matrices, and even sparse matrices.
** It supports all standard numeric types, including std::complex, integers, and is easily extensible to [http://eigen.tuxfamily.org/dox-devel/TopicCustomizingEigen.html#CustomScalarType custom numeric types].
+
** It supports all standard numeric types, including std::complex, integers, and is easily extensible to [http://eigen.tuxfamily.org/dox/TopicCustomizingEigen.html#CustomScalarType custom numeric types].
** It supports various [http://eigen.tuxfamily.org/dox-devel/TopicLinearAlgebraDecompositions.html matrix decompositions] and [http://eigen.tuxfamily.org/dox-devel/TutorialGeometry.html geometry features].
+
** It supports various [http://eigen.tuxfamily.org/dox/group__TopicLinearAlgebraDecompositions.html matrix decompositions] and [http://eigen.tuxfamily.org/dox/group__TutorialGeometry.html geometry features].
** Its ecosystem of [http://eigen.tuxfamily.org/dox-devel/group__Unsupported__modules.html unsupported modules] provides many specialized features such as non-linear optimization, matrix functions, a polynomial solver, FFT, and much more.
+
** Its ecosystem of [http://eigen.tuxfamily.org/dox/unsupported/index.html unsupported modules] provides many specialized features such as non-linear optimization, matrix functions, a polynomial solver, FFT, and much more.
 
* '''[[Benchmark|Eigen is fast]].'''
 
* '''[[Benchmark|Eigen is fast]].'''
** Expression templates allow to intelligently remove temporaries and enable [http://eigen.tuxfamily.org/dox-devel/TopicLazyEvaluation.html lazy evaluation], when that is appropriate.
+
** Expression templates allow to intelligently remove temporaries and enable [http://eigen.tuxfamily.org/dox/TopicLazyEvaluation.html lazy evaluation], when that is appropriate.
** [[FAQ#Vectorization|Explicit vectorization]] is performed for SSE 2/3/4, ARM NEON, and AltiVec instruction sets, with graceful fallback to non-vectorized code.  
+
** [[FAQ#Vectorization|Explicit vectorization]] is performed for SSE 2/3/4, AVX, AVX2, FMA, AVX512, ARM NEON (32-bit and 64-bit), PowerPC AltiVec/VSX (32-bit and 64-bit), ZVector (s390x/zEC13) SIMD instruction sets, and since 3.4 MIPS MSA with graceful fallback to non-vectorized code.  
 
** Fixed-size matrices are fully optimized: dynamic memory allocation is avoided, and the loops are unrolled when that makes sense.
 
** Fixed-size matrices are fully optimized: dynamic memory allocation is avoided, and the loops are unrolled when that makes sense.
 
** For large matrices, special attention is paid to cache-friendliness.
 
** For large matrices, special attention is paid to cache-friendliness.
 
* '''[[Reliability|Eigen is reliable]].'''
 
* '''[[Reliability|Eigen is reliable]].'''
** Algorithms are carefully selected for reliability. Reliability trade-offs are [http://eigen.tuxfamily.org/dox-devel/TopicLinearAlgebraDecompositions.html clearly documented] and [http://eigen.tuxfamily.org/dox-devel/classEigen_1_1JacobiSVD.html extremely] [http://eigen.tuxfamily.org/dox-devel/classEigen_1_1FullPivHouseholderQR.html safe] [http://eigen.tuxfamily.org/dox-devel/classEigen_1_1FullPivLU.html decompositions] are available.
+
** Algorithms are carefully selected for reliability. Reliability trade-offs are [http://eigen.tuxfamily.org/dox/group__TopicLinearAlgebraDecompositions.html clearly documented] and [http://eigen.tuxfamily.org/dox/classEigen_1_1JacobiSVD.html extremely] [http://eigen.tuxfamily.org/dox/classEigen_1_1FullPivHouseholderQR.html safe] [http://eigen.tuxfamily.org/dox/classEigen_1_1FullPivLU.html decompositions] are available.
 
** Eigen is thoroughly tested through its own [[Tests|test suite]] (over 500 executables), the standard BLAS test suite, and parts of the LAPACK test suite.
 
** Eigen is thoroughly tested through its own [[Tests|test suite]] (over 500 executables), the standard BLAS test suite, and parts of the LAPACK test suite.
 
* '''[[API_Showcase|Eigen is elegant]].'''
 
* '''[[API_Showcase|Eigen is elegant]].'''
Line 47: Line 78:
 
== Documentation ==
 
== Documentation ==
  
* '''[http://eigen.tuxfamily.org/dox Eigen 3 documentation]''': this includes a [http://eigen.tuxfamily.org/dox/GettingStarted.html getting started guide], a [http://eigen.tuxfamily.org/dox/TutorialMatrixClass.html long tutorial], a [http://eigen.tuxfamily.org/dox/QuickRefPage.html quick reference], and page about [http://eigen.tuxfamily.org/dox/Eigen2ToEigen3.html porting from Eigen 2 to Eigen 3].
+
* '''[http://eigen.tuxfamily.org/dox Eigen 3 documentation]''': this includes a [http://eigen.tuxfamily.org/dox/GettingStarted.html getting started guide], a [http://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html long tutorial], a [http://eigen.tuxfamily.org/dox/group__QuickRefPage.html quick reference], and page about [http://eigen.tuxfamily.org/dox/Eigen2ToEigen3.html porting from Eigen 2 to Eigen 3].
  
 
* '''[http://eigen.tuxfamily.org/dox-devel Eigen development branch documentation]'''
 
* '''[http://eigen.tuxfamily.org/dox-devel Eigen development branch documentation]'''
  
* '''[http://eigen.tuxfamily.org/dox-2.0 Eigen 2 documentation]''': this includes the [http://eigen.tuxfamily.org/dox-2.0/TutorialCore.html Eigen 2 Tutorial].
+
* '''[http://eigen.tuxfamily.org/dox-2.0 Eigen 2 documentation]''' (old): this includes the [http://eigen.tuxfamily.org/dox-2.0/TutorialCore.html Eigen 2 Tutorial].
 +
 
 +
* [[FAQ| FAQ (Frequently asked questions) ]]
 +
 
 +
* [[Publications|Presentations and talks]]
  
 
== Requirements ==
 
== Requirements ==
Line 59: Line 94:
 
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.
 
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.
  
== Download ==
+
== License ==
  
The '''latest stable release''' is Eigen 3.0.0. Get it here:
+
Eigen is [http://www.gnu.org/philosophy/free-sw.html Free Software]. Starting from the 3.1.1 version, it is licensed under the [http://www.mozilla.org/MPL/2.0 MPL2], which is a simple weak copyleft license. Common questions about the MPL2 are answered in the official [http://www.mozilla.org/MPL/2.0/FAQ.html MPL2 FAQ].
[http://bitbucket.org/eigen/eigen/get/3.0.0.tar.bz2 tar.bz2],
+
[http://bitbucket.org/eigen/eigen/get/3.0.0.tar.gz tar.gz],
+
[http://bitbucket.org/eigen/eigen/get/3.0.0.zip zip].
+
  
The '''latest 2.0 (old) series release''' is Eigen 2.0.15. Get it here:
+
Earlier versions were licensed under the LGPL3+.
[http://bitbucket.org/eigen/eigen/get/2.0.15.tar.bz2 tar.bz2],
+
[http://bitbucket.org/eigen/eigen/get/2.0.15.tar.gz tar.gz],
+
[http://bitbucket.org/eigen/eigen/get/2.0.15.zip zip].
+
  
The '''unstable''' source code from the '''development branch''' is there: [http://bitbucket.org/eigen/eigen/get/default.tar.bz2 tar.bz2], [http://bitbucket.org/eigen/eigen/get/default.tar.gz tar.gz], [http://bitbucket.org/eigen/eigen/get/default.zip zip].
+
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.
Past releases, including beta and RC releases can be found on [http://bitbucket.org/eigen/eigen/downloads/ this page].
+
 
+
You can [https://bitbucket.org/eigen/eigen/src/ browse the source code].
+
 
+
The SCM tool used for Eigen development is [http://www.selenic.com/mercurial/wiki/ Mercurial] also known as "hg".
+
 
+
To check out the Eigen repository, do:
+
hg clone https://bitbucket.org/eigen/eigen/
+
 
+
== License ==
+
 
+
Eigen is [http://www.gnu.org/philosophy/free-sw.html Free Software]. It is licensed under the LGPL3+. As an alternative license choice, Eigen is also licensed under the GPL2+.
+
  
 
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.
 
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 '''[[Licensing FAQ]]''' for more information, and do not hesitate to [[#Mailing_list|contact us]] if you have any questions.
+
See the '''[http://www.mozilla.org/MPL/2.0/FAQ.html MPL2 FAQ]''' for more information, and do not hesitate to [[#Mailing_list|contact us]] if you have any questions.
  
 
== Compiler support ==
 
== Compiler support ==
Line 95: Line 112:
  
 
Eigen is being successfully used with the following compilers:
 
Eigen is being successfully used with the following compilers:
* [http://gcc.gnu.org GCC], version 3.4 and newer. Very good performance with GCC 4.2 and newer.
+
* [http://gcc.gnu.org GCC], version 4.8 and newer. Older versions of gcc might work as well but they are not tested anymore.
* [http://en.wikipedia.org/wiki/Visual_C%2B%2B MSVC] (Visual Studio), 2005 and newer. Vectorization is enabled with 2008 and newer, which also gives good performance.
+
* [http://en.wikipedia.org/wiki/Visual_C%2B%2B MSVC] (Visual Studio), 2012 and newer. Be aware that enabling IntelliSense (/FR flag) is known to trigger some internal compilation errors. The old 3.2 version of Eigen supports MSVC 2010, and the 3.1 version supports MSVC 2008.
* [http://en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler Intel C++ compiler]. Very good performance.
+
* [http://en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler Intel C++ compiler]. Enabling the <tt>-inline-forceinline</tt> option is highly recommended.
* [http://clang.llvm.org/cxx_status.html LLVM/CLang++] (2.8 and newer).
+
* [http://clang.llvm.org/cxx_status.html LLVM/CLang++], version 3.4 and newer. (The 2.8 version used to work fine, but  it is not tested with up-to-date versions of Eigen)
* [http://en.wikipedia.org/wiki/Mingw MinGW], recent versions. Very good performance when using GCC 4.
+
* XCode 7 and newer. Based on LLVM/CLang.
 +
* [http://en.wikipedia.org/wiki/Mingw MinGW], recent versions. Based on GCC.
 
* QNX's QCC compiler.
 
* QNX's QCC compiler.
  
== Projects using Eigen ==
+
Regarding performance, Eigen performs best with compilers based on GCC or LLVM/Clang.
 
+
See [[FAQ#Compilation|this page]] for some known compilation issues.
'''Science'''
+
* The [http://sta.estec.esa.int/Space_Trajectory_Analysis/Home.html Space Trajectory Analysis] project at the [http://www.esa.int/esaCP/index.html European Space Agency]. They even have an [http://sta.estec.esa.int/Space_Trajectory_Analysis/News/Entries/2009/3/31_STA_astro-core_is_using_the_Eigen_library.html announcement on using Eigen].
+
* [http://avogadro.openmolecules.net Avogadro], an opensource advanced molecular editor.
+
* The 3D astronomical visualization application [http://www.shatters.net/celestia Celestia] is now using Eigen for all orbital and geometric calculation.
+
* [https://www.yade-dem.org/sphinx/ Yade], platform for dynamic particle models, uses Eigen for geometric computations (switched from the [http://www.geometrictools.com WildMagic] package)
+
* [https://tng.tuxfamily.org SLangTNG], an application suite for numerical analysis, linear algebra, advanced statistics, FEM, structural dynamics, data visualization, etc.
+
 
+
'''Robotics and engineering'''
+
* The [http://yujinrobot.com/ Yujin Robot] company uses Eigen for the navigation and arm control of their next gen robots. (switched from blitz, ublas and tvmet)
+
* The [http://www.ros.org Robotic Operating System (ROS)] developed by [http://www.willowgarage.com Willow Garage].
+
* [http://github.com/cbecker/openahrs openAHRS] Open Source [http://en.wikipedia.org/wiki/Inertial_Measurement_Unit IMU] / [http://en.wikipedia.org/wiki/Attitude_and_Heading_Reference_Systems AHRS]
+
* The [http://www.dribblers.de/ Darmstadt Dribblers] autonomous Humanoid Robot Soccer Team and [http://www.gkmm.tu-darmstadt.de/rescue/ Darmstadt Rescue Robot Team] use Eigen for navigation and world modeling.
+
* The [http://www.mrpt.org/ Mobile Robot Programming Toolkit (MRPT)], a set of libraries for SLAM, localization and computer vision, moved to Eigen (blog [http://www.mrpt.org/blog_2010-NOV-24:MRPT_moves_to_Eigen announcement]) (switched from home made math classes).
+
 
+
'''Computer Graphics'''
+
* [http://vcg.sourceforge.net VcgLib], an opensource C++ template library for the manipulation and processing of triangle and tetrahedral meshes. (switched from home made math classes)
+
* [http://meshlab.sourceforge.net MeshLab], an opensource software for the processing and editing of unstructured 3D triangular meshes and point cloud. (switched from vcglib's math classes)
+
* Expe, an experimental framework for the rapid prototyping of graphics applications. No release yet, but it uses 90% of Eigen's features. (switched from home made math classes).
+
* [http://code.google.com/p/libmv libmv], an opensource structure from motion library. (switched from FLENS)
+
 
+
'''Google'''
+
* [http://www.google.com Google] uses Eigen for machine learning, computer vision, and optimization.<!--DO NOT EDIT THIS LINE WITHOUT AUTHORIZATION! WE GOT EXPLICIT PERMISSION FROM GOOGLE TO USE THIS PRECISE PHRASING-->
+
 
+
'''Games'''
+
* [http://www.redsword.com Red Sword Studios], maker of the iPhone games [http://linktoapp.com/Gradient Gradient], [http://linktoapp.com/Fortress+Luna Fortress Luna], [http://linktoapp.com/Stimulus Stimulus], and Lustre, uses Eigen extensively.  Why roll your own matrix/vector/transformation code when there's Eigen?
+
 
+
'''KDE''' (our origins!)
+
* [http://edu.kde.org/step Step], an educational physics simulator.
+
* [http://www.koffice.org Koffice2] (KDE's office suite), in particular [http://www.koffice.org/krita/ Krita], the painting and image editing module. Eigen is also used a bit by [http://www.koffice.org/kspread/ KSpread], the spreadsheet module, for matrix functions such as MINVERSE, MMULT, MDETERM.
+
* [http://edu.kde.org/kalzium Kalzium] uses Eigen indirectly through the aforementioned [http://avogadro.openmolecules.net Avogadro] library.
+
* the Mandelbrot wallpaper plugin, some screensavers, [http://freehackers.org/~rivo/kgllib/html/ kgllib], [http://websvn.kde.org/trunk/playground/graphics/solidkreator/ solidkreator], etc.
+
 
+
If you are aware of some interesting projects using Eigen, please send us a message or directly edit this wiki page !
+
  
 
== Get support ==
 
== Get support ==
  
 
Need help using Eigen? Try this:
 
Need help using Eigen? Try this:
* The [http://forum.kde.org/viewforum.php?f=74 Users Forum] is your best resource.
+
* To get help, [http://stackoverflow.com/questions/tagged/eigen stackoverflow] is your best resource. You can also search within the [http://forum.kde.org/viewforum.php?f=74 forum archives].
 +
<!-- * The [http://forum.kde.org/viewforum.php?f=74 Users Forum] is your best resource.-->
 
* You can always try our [[#IRC Channel|IRC channel]].
 
* You can always try our [[#IRC Channel|IRC channel]].
 
* Want to discuss something with the developers? Use our [[#Mailing_list|mailing list]].
 
* Want to discuss something with the developers? Use our [[#Mailing_list|mailing list]].
Line 155: Line 141:
 
* To unsubscribe, send a mail with subject ''unsubscribe'' 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. Notice that:
+
The Eigen mailing list can be used for discussing general Eigen development topics. End-user questions are often better asked on the [http://forum.kde.org/viewforum.php?f=74 Users Forum]. Development of specific features is best tracked and discussed on [http://eigen.tuxfamily.org/bz our Bugzilla]. See [[Bugzilla|this page]].
* End-user questions are better asked on the [http://forum.kde.org/viewforum.php?f=74 Users Forum].
+
* Development of specific features is best tracked and discussed on [http://eigen.tuxfamily.org/bz our Bugzilla]. See [[Bugzilla|this page]].
+
  
This mailing list is '''public''' and has '''[http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/ public archives]'''.
+
This mailing list is '''public''' and has '''[http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/ public archives]'''. The archives are mirrored by [http://dir.gmane.org/gmane.comp.lib.eigen gmane.org].
  
 
'''Important:''' You must subscribe before you may post. Sorry, this is our only way to prevent spam.
 
'''Important:''' You must subscribe before you may post. Sorry, this is our only way to prevent spam.
Line 165: Line 149:
 
'''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!
 
'''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!
  
== Core Team Mailing list ==
+
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, Jitse and Christoph). The address is '''eigen-core-team''' at the same lists server as for the [[#Mailing list|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.
  
This '''private''' mailing list should only be used for matters that need to be discussed privately. It is read by Benoît and Gaël.
+
== IRC Channel ==
  
Its address is '''eigen-core-team''' at the same lists server as for the [[#Mailing list|Eigen mailing list]].
+
Our [http://en.wikipedia.org/wiki/Internet_Relay_Chat IRC] channel is #eigen on [irc://irc.freenode.net irc.freenode.net].
  
No need to subscribe (actually, subscription is closed).
+
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 [[#Mailing list|Eigen mailing list]]. Some user support also happens over IRC, but the main place for Eigen user support is the [http://forum.kde.org/viewforum.php?f=74 Users Forum].
  
For all Eigen development discussion, use the public [[#Mailing list|Eigen mailing list]] or [[Bugzilla]] instead.
+
== Contributing to Eigen ==
  
The point of the eigen-core-team list is that sometimes, people want to write privately to a few core developers. This list provides a simple way of doing so.
+
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.
  
== IRC Channel ==
+
== Projects using Eigen ==
  
Our [http://en.wikipedia.org/wiki/Internet_Relay_Chat IRC] channel is #eigen on irc.freenode.net.
+
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]].
  
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 [[#Mailing list|Eigen mailing list]]. Some user support also happens over IRC, but the main place for Eigen user support is the [http://forum.kde.org/viewforum.php?f=74 Users Forum].
+
'''Extensions, numerical computation'''
 +
* Google's [http://tensorflow.org TensorFlow] is an Open Source Software Library for Machine Intelligence
 +
* Google's [http://ceres-solver.org/ Ceres] solver is a portable C++ library that allows for modeling and solving large complicated nonlinear least squares problems.
 +
* The Manifold ToolKit [http://openslam.org/MTK 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).
 +
* [https://github.com/ethz-adrl/ifopt IFOPT] is a modern, light-weight, Eigen-based C++ interface to Nonlinear Programming solvers, such as Ipopt and Snopt.
 +
* [https://github.com/PatWie/CppNumericalSolvers CppNumericalSolvers] is a lightweight header-only library for non-linear optimization including various solvers: CG, L-BGFS-B, CMAes, Nelder-Mead.
 +
* [https://borg.cc.gatech.edu/projects/gtsam GTSAM] is a library implementing smoothing and mapping (SAM) in robotics and vision, using factor graphs and Bayes networks.
 +
* [https://openslam.org/g2o.html g2o] is an open-source C++ framework for optimizing graph-based nonlinear least-square problems.
 +
* [http://code.google.com/p/redsvd/ redsvd] is a RandomizED Singular Value Decomposition library for sparse or very large dense matrices.
 +
* [http://cran.r-project.org/web/packages/trustOptim trustOptim] is a trust-region based non linear solver supporting sparse Hessians (C++ implementation with R binding).
 +
* [http://shogun-toolbox.org/ Shogun]: a large scale machine learning toolbox.
 +
* [http://mc-stan.org/ Stan]: a statistical package based on Eigen that includes a reverse-mode automatic differentiation implementation.
 +
* [https://gitlab.com/stochastic-control/StOpt StOpt], the STochastic OPTimization library aims at providing tools in C++ for solving some stochastic optimization problems encountered in finance or in the industry.
 +
* [http://www.ceemple.com Ceemple] is a scientific programming environment allowing to rapidly prototype applications C++ as in MatLab or Python.
 +
* [https://nelson-numerical-software.github.io/nelson-website Nelson] an open computing environment for engineering and scientific applications using modern C/C++ libraries (Boost, Eigen, FFTW, …) and others state of art numerical libraries. (GPL2)
 +
* [https://github.com/marcel-goldschen-ohm/EigenLab EigenLab] is a header only library to parse and evaluate expressions working on Eigen matrices.
 +
* [http://spafedte.github.io/ SpaFEDte] a C++ library for discontinuous Galerkin discretizations on general meshes.
 +
* [https://www.biicode.com/ biicode] a C and C++ dependency manager that #includes the most popular and useful C/C++ libs and frameworks.
 +
* [http://mklab.iti.gr/project/aksda CERTH's AKSDA]: a GPU-accelerated dimensionality reduction and classification method for high-dimensional data.
 +
* [https://spectralib.org/ Spectra] stands for Sparse Eigenvalue Computation Toolkit as a Redesigned ARPACK. It is a header-only C++ library for large scale eigenvalue problems, built on top of Eigen.
 +
* [https://www.precice.org/ preCICE] is a coupling library for partitioned multi-physics simulations, including, but not restricted to fluid-structure interaction and conjugate heat transfer simulations. It supports OpenFOAM, CalculiX, SU2, and several other well-known, as well as in-house solvers. It is free/open-source software and its code is available on GitHub under the LGPL3 license. [https://github.com/precice/ Link to source code and documentation]
 +
 
 +
'''Bindings'''
 +
* The [http://cran.r-project.org/web/packages/RcppEigen/index.html RcppEigen] package provides bindings and more for R.
 +
* [https://pypi.python.org/pypi/minieigen minieigen] is small boost::python wrapper for Eigen's core classes (dense fixed and dynamic-sized vectors, matrices, aligned boxes, quaternions; with integer, floating and complex scalars) including operators and subset of Eigen's API methods.
 +
* [https://pypi.python.org/pypi/eigency Eigency] is a Cython interface between the numpy arrays and the Matrix/Array classes of the Eigen C++ library.
 +
* [http://packages.python.org/sparray sparray]: a python binding of the Sparse module - alpha stage.
 +
* [https://github.com/ryanrhymes/eigen OCamlEigen], a thin OCaml interface to the Eigen 3 C++ library.
 +
* [https://github.com/osidorkin/haskell-eigen haskell-eigen] offers bindings for the Haskell language.
 +
* [https://github.com/hughperkins/jeigen jeigen], a Java wrapper for Eigen.
 +
* [https://www.autoitscript.com/forum/files/file/319-eigen4autoit/ Eigen4AutoIt], a wrapper for the AutoIt scripting language.
 +
* [https://github.com/ggcrunchy/eigen-lua eigen-lua], a Lua wrapper around parts of the Eigen numerical library.
 +
* [https://github.com/stack-of-tasks/eigenpy Eigenpy]: Efficient bindings between Numpy and Eigen using Boost.Python with support of the Geometry module
 +
 
 +
'''Science'''
 +
* [http://www.mdlab-software.com/ GINESTRA], a semiconductor device simulator with a focus on advanced dielectric materials and interfaces.
 +
* [http://gs.jku.at/gismo G+Smo], an open-source library for geometric design and numerical simulation with isogeometric analyis.
 +
* [https://flexiblesusy.hepforge.org/ FlexibleSUSY], a spectrum generator which calculates the masses of elementary particles.
 +
* The [http://home.cern/about/experiments/atlas ATLAS] experiment at the [http://home.cern/topics/large-hadron-collider LHC (Large Hadron Collider)] at CERN is using Eigen, as reported in [http://iopscience.iop.org/article/10.1088/1742-6596/608/1/012047/pdf 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 ([http://www.lsst.org/lsst/ website]; [https://dev.lsstcorp.org/trac trac]) is a project to build a 3.2Mpixel camera on an 8.4m telescope and survey the entire visible sky every three days.
 +
* [http://gnudatalanguage.sourceforge.net/ Gnu Data Language], a GPL interpretor of IDL syntax codes.
 +
* The [http://sta.estec.esa.int/Space_Trajectory_Analysis/Home.html Space Trajectory Analysis] project at the [http://www.esa.int/esaCP/index.html European Space Agency]. They even have an [http://sta.estec.esa.int/Space_Trajectory_Analysis/News/Entries/2009/3/31_STA_astro-core_is_using_the_Eigen_library.html announcement on using Eigen].
 +
* [http://avogadro.openmolecules.net Avogadro], an opensource advanced molecular editor.
 +
* The 3D astronomical visualization application [http://www.shatters.net/celestia Celestia] is now using Eigen for all orbital and geometric calculation.
 +
* [https://www.yade-dem.org/sphinx/ Yade], platform for dynamic particle models, uses Eigen for geometric computations (switched from the [http://www.geometrictools.com WildMagic] package)
 +
* [https://tng.tuxfamily.org SLangTNG], an application suite for numerical analysis, linear algebra, advanced statistics, FEM, structural dynamics, data visualization, etc.
 +
* [http://clip.berlios.de Clip], an opensource program for the orientation of Laue exposures.
 +
* [http://www.advanpix.com/ Multiprecision Computing Toolbox for MATLAB] uses Eigen as core library for matrix computations.
 +
* [http://pteros.sourceforge.net/ Pteros], a C++ library for molecular modeling.
 +
* [http://cufflinks.cbcb.umd.edu/ Cufflinks], a tool for transcript assembly, differential expression, and differential regulation for RNA-Sequences.
 +
* [http://www.baayen-heinz.com/vortexje Vortexje]: a GPL library for simulation implementing the source-doublet panel method.
 +
* [http://www.woodem.eu Woo(dem)], particle dynamics software (DEM, FEM); Eigen wrapped using [https://pypi.python.org/pypi/minieigen minieigen] in Python.
 +
* [http://R-nimble.org NIMBLE], a system for programming statistical algorithms such as Markov chain Monte Carlo from R.  NIMBLE includes a compiler for a subset of R to C++ that uses Eigen.
 +
* [https://github.com/bjaraujo/ENigMA ENigMA] is a multiphysics numerical library which uses Eigen.
 +
* [http://www.imstk.org/ iMSTK] is an open source software toolkit written in C++ that aids rapid prototyping of interactive multi-modal surgical simulations.
 +
* [https://github.com/mriesch-tum/mbsolve mbsolve] is an open-source solver tool for the Maxwell-Bloch equations, which are used to model light-matter interaction in nonlinear optics.
 +
* [https://github.com/spin-scenario/spin-scenario Spin-Scenario], a flexible scripting environment for realistic magnetic resonance (NMR/MRI) simulations.
 +
* [https://github.com/vsoftco/qpp Quantum++] is a modern C++11 general purpose quantum computing library, composed solely of template header files.
 +
 
 +
'''Robotics and engineering'''
 +
* The [http://yujinrobot.com/ Yujin Robot] company uses Eigen for the navigation and arm control of their next gen robots. (switched from blitz, ublas and tvmet)
 +
* The [http://www.ros.org Robotic Operating System (ROS)] developed by [http://www.willowgarage.com Willow Garage].
 +
* [http://github.com/cbecker/openahrs openAHRS] Open Source [http://en.wikipedia.org/wiki/Inertial_Measurement_Unit IMU] / [http://en.wikipedia.org/wiki/Attitude_and_Heading_Reference_Systems AHRS]
 +
* The [http://www.dribblers.de/ Darmstadt Dribblers] autonomous Humanoid Robot Soccer Team and [http://www.gkmm.tu-darmstadt.de/rescue/ Darmstadt Rescue Robot Team] use Eigen for navigation and world modeling.
 +
* The [http://www.mrpt.org/ Mobile Robot Programming Toolkit (MRPT)], a set of libraries for SLAM, localization and computer vision, moved to Eigen (switched from home made math classes).
 +
* [https://bitbucket.org/rbdl/rbdl/ RBDL]: a C++ library for rigid body dynamics.
 +
* [http://roblib.sf.net RL] a self-contained C++ library for robot kinematics, motion planning and control.
 +
* [https://code.google.com/p/b-tk/ 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.
 +
* [https://github.com/ethz-asl/libpointmatcher libpointmatcher] is a "Iterative Closest Point" library for 3D mapping in robotics.
 +
* [http://www.roboptim.net/ RobOptim] is a modern, Open-Source, C++ library for numerical optimization applied to robotics.
 +
* [https://github.com/ethz-adrl/towr towr] is a light-weight and extensible C++ library for trajectory optimization for legged robots.
 +
* [https://github.com/stack-of-tasks/pinocchio Pinocchio]: a fast and efficient Rigid Body Dynamics library
 +
* [https://github.com/humanoid-path-planner The Humanoid Path Planner]: a software for Motion and Manipulation Planning
 +
* [http://www.mira-project.org MIRA] is a cross-platform framework written in C++ that provides a middleware for the development of complex robotic applications, which consists of distributed software modules.
 +
 
 +
'''Computer Graphics, Geometry, Visualization'''
 +
* [http://www.cgal.org Computational Geometry Algorithms Library (CGAL)], a collaborative effort to develop a robust, easy to use, and efficient C++ software library of geometric data structures and algorithms.
 +
* [http://pointclouds.org Point Cloud Library (PCL)], a large scale, BSD licensed, open project for point cloud processing. Uses Eigen as their math backend.
 +
* [http://vcg.sourceforge.net VcgLib], an opensource C++ template library for the manipulation and processing of triangle and tetrahedral meshes. (switched from home made math classes)
 +
* [http://meshlab.sourceforge.net MeshLab], an opensource software for the processing and editing of unstructured 3D triangular meshes and point cloud. (switched from vcglib's math classes)
 +
* [https://github.com/patrikhuber/eos eos], an opensource  and lightweight 3D Morphable Face Model fitting library in modern C++11/14.
 +
* [https://topology-tool-kit.github.io/ The Topology ToolKit (TTK)], an open-source library and software collection for topological data analysis in scientific visualization.
 +
<!-- * [https://www.mitsuba-renderer.org/], a physically based rendering system, GPL licensed. -->
 +
* [http://www.theia-sfm.org/ Theia], an opensource C++ structure from motion library tailored for researchers, BSD licensed.
 +
* [http://code.google.com/p/libmv libmv], an opensource structure from motion library. (switched from FLENS)
 +
* [http://imagine.enpc.fr/~moulonp/openMVG openMVG], a simple library for multiple view geometry.
 +
* [https://github.com/ahupowerdns/metronome metronome] , a simple metric storage/graphing engine using Eigen for SVD least squares interpolation & data consolidation
 +
* [http://piccantelib.net piccante], a C++ imaging library designed for High Dynamic Range (HDR) processing.
 +
* [https://github.com/libigl/libigl/ libigl] is a simple C++ geometry processing library with wide functionality.
 +
* [https://github.com/gabyx/ApproxMVBB ApproxMVBB] is a small library to compute fast approximate oriented bounding boxes of 3D point clouds.
 +
* [https://github.com/madplotlib/madplotlib Madplotlib] makes it easier to plot 2D charts on Qt from data created by Eigen::ArrayXf.
 +
* [http://zephyr.3dflow.net 3DF Zephyr] is a commercial photogrammetry and 3D modeling software, developed by [http://www.3dflow.net 3Dflow srl]
 +
 
 +
'''Mobile apps'''
 +
* [https://www.layar.com/ Layar], an augmented reality application for IPhone and Android.
 +
* [http://www.redsword.com Red Sword Studios], maker of the iPhone games [http://linktoapp.com/Gradient Gradient], [http://linktoapp.com/Fortress+Luna Fortress Luna], [http://linktoapp.com/Stimulus Stimulus], and Lustre, uses Eigen extensively.  Why roll your own matrix/vector/transformation code when there's Eigen?
 +
* [http://www.iperfectputt.com/ iPerfectPutt], an iPhone game, uses Eigen for 3D geometry calculations.
 +
* [http://mousebird.github.io/WhirlyGlobe WhirlyGlobe-Maply] an open source geospatial display toolkit for iOS and Android.  It implements both a 3D interactive globe and a 2D (slippy) map
 +
 
 +
'''KDE''' (our origins!)
 +
* [http://edu.kde.org/step Step], an educational physics simulator.
 +
* [http://www.koffice.org Koffice2] (KDE's office suite), in particular [http://www.koffice.org/krita/ Krita], the painting and image editing module. Eigen is also used a bit by [http://www.koffice.org/kspread/ KSpread], the spreadsheet module, for matrix functions such as MINVERSE, MMULT, MDETERM.
 +
* [http://edu.kde.org/kalzium Kalzium] uses Eigen indirectly through the aforementioned [http://avogadro.openmolecules.net Avogadro] library.
 +
* the Mandelbrot wallpaper plugin, some screensavers, [http://freehackers.org/~rivo/kgllib/html/ kgllib], [http://websvn.kde.org/trunk/playground/graphics/solidkreator/ solidkreator], etc.
 +
 
 +
<!-- If there are projects not fitting in any category, un-comment this:
 +
'''Others''' -->
 +
 
 +
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 ==
 
== Credits ==
Line 187: Line 279:
 
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!''')
 
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!''')
  
<!-- Last updated: 26 February 2011 -->
+
<!-- Last updated: 1 Sep 2014 -->
 
{|  
 
{|  
 +
|-
 +
| 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
 
| Carlos Becker
Line 210: Line 311:
 
| Romain Bossart
 
| Romain Bossart
 
| Updates to Sparse solvers
 
| 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
 +
|-
 +
| Philipp Büttgenbach
 +
| Bug fix when differentiating a one-dimensional spline
 
|-
 
|-
 
| [http://www.freehackers.org/thomas Thomas Capricelli]
 
| [http://www.freehackers.org/thomas Thomas Capricelli]
 
| [http://www.freehackers.org/thomas/2009/05/18/feedback-about-converting-eigen2-to-mercurial/ Migration to mercurial], Non-linear optimization and numerical differentiation, cron-job to update the online dox
 
| [http://www.freehackers.org/thomas/2009/05/18/feedback-about-converting-eigen2-to-mercurial/ 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
 
| Andrew Coles
 
| Fixes (including a compilation error)
 
| Fixes (including a compilation error)
 +
|-
 +
| Jeff "complexzeros"
 +
| Spline interpolation with derivatives
 
|-
 
|-
 
| Marton Danoczy  
 
| Marton Danoczy  
| MSVC compilation fix
+
| 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
 
| Christian Ehrlicher
 
| MSVC compilation fix
 
| MSVC compilation fix
 +
|-
 +
| Martinho Fernandes
 +
| Make our aligned allocator support C++11
 
|-
 
|-
 
| Daniel Gomez Ferro
 
| Daniel Gomez Ferro
Line 233: Line 367:
 
|-
 
|-
 
| Anton Gladky
 
| Anton Gladky
| Visual Studio 2008 compilation fix
+
| Visual Studio 2008 and GCC 4.6 compilation fixes
 
|-
 
|-
 
| Stuart Glaser
 
| Stuart Glaser
 
| Prevent allocations in LU decomposition
 
| Prevent allocations in LU decomposition
 +
|-
 +
| Marc Glisse
 +
| C++11 compilation issues (suffices for literals)
 
|-
 
|-
 
| Frederic Gosselin
 
| Frederic Gosselin
 
| Improve filter for hidden files in CMake
 
| Improve filter for hidden files in CMake
 +
|-
 +
| Christoph Grüninger 
 +
| Add SuperLU 5 support
 
|-
 
|-
 
| [http://www.labri.fr/perso/guenneba/ Gaël Guennebaud]
 
| [http://www.labri.fr/perso/guenneba/ Gaël Guennebaud]
Line 249: Line 389:
 
| Marcus D. Hanwell
 
| Marcus D. Hanwell
 
| CMake improvements. Marcus is a developer at Kitware!
 
| 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
 
| Hauke Heibel
| Lots of increasingly 'core' things
+
| Extended matrix functions, STL compatibility, Splines, CMake improvements, and more ...
 
|-
 
|-
 
| [http://www.informatik.uni-bremen.de/agebv/en/ChristophHertzberg Christoph Hertzberg]
 
| [http://www.informatik.uni-bremen.de/agebv/en/ChristophHertzberg Christoph Hertzberg]
| Quaternions (vectorized multiplication, unaligned)
+
| Quaternions, shifts for Cholmod, bug fixes, lots of user support on forums and IRC
 +
|-
 +
| [http://www.holoborodko.com/pavel/ Pavel Holoborodko]
 +
| Multi-precision support with [http://www.holoborodko.com/pavel/mpfr/ 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
 
| Trevor Irons
 
| Square root for complex numbers, fix compile errors and mistake in docs
 
| Square root for complex numbers, fix compile errors and mistake in docs
 
|-
 
|-
| [http://www.math.toronto.edu/bjacob/ Benoît Jacob]
+
| [http://people.mozilla.org/~bjacob Benoît Jacob]
 
| Core developer
 
| 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
 
| Marijn Kruisselbrink
 
| CMake fixes
 
| CMake fixes
 +
|-
 +
| Abhijit Kundu
 +
| Fix compilation errors in OpenGL demos
 
|-
 
|-
 
| [http://perlgeek.de/ Moritz Lenz]
 
| [http://perlgeek.de/ Moritz Lenz]
 
| Allow solving transposed problem with SuperLU
 
| Allow solving transposed problem with SuperLU
 +
|-
 +
| Bo Li
 +
| Fix bugs in Spline constructor
 +
|-
 +
| Sebastian Lipponer
 +
| MSVC compilation support
 
|-
 
|-
 
| Daniel Lowenberg
 
| Daniel Lowenberg
Line 273: Line 455:
 
| David J. Luitz
 
| David J. Luitz
 
| Bug fix for sparse * dense matrix product
 
| 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
 
| D J Marcin
Line 278: Line 466:
 
|-
 
|-
 
| Konstantinos A. Margaritis
 
| Konstantinos A. Margaritis
| AltiVec and ARM NEON vectorization
+
| AltiVec/VSX, ARM NEON (32-bit/64-bit) and S390x SIMD (ZVector) vectorization
 +
|-
 +
| Roger Martin
 +
| Component-wise arc tangent function
 
|-
 
|-
 
| Ricard Marxer
 
| Ricard Marxer
Line 293: Line 484:
 
|-
 
|-
 
| Keir Mierle
 
| Keir Mierle
| LDLT decomposition and other improvements
+
| LDLT decomposition and other improvements, help with MPL relicensing
 
|-
 
|-
 
| Laurent Montel
 
| Laurent Montel
Line 308: Line 499:
 
|-
 
|-
 
| [http://www.maths.leeds.ac.uk/~jitse/ Jitse Niesen]
 
| [http://www.maths.leeds.ac.uk/~jitse/ Jitse Niesen]
| Matrix functions, large improvements in the Eigenvalues module and in the docs.
+
| Matrix functions, large improvements in the Eigenvalues module and in the docs, and more ...
 +
|-
 +
| [http://www.irisa.fr/sage/desire Desire Nuentsa]
 +
| Many improvements to Sparse module: SparseLU, SparseQR, ILUT, PaStiXSupport, &hellip;
 +
|-
 +
| Jan Oberländer
 +
| Compatibility with termios.h
 
|-
 
|-
 
| Jos van den Oever
 
| Jos van den Oever
Line 315: Line 512:
 
| Michael Olbrich
 
| Michael Olbrich
 
| Early patches, including the initial loop meta-unroller
 
| Early patches, including the initial loop meta-unroller
 +
|-
 +
| Simon Pilgrim
 +
| Optimizations for NEON
 
|-
 
|-
 
| Bjorn Piltz
 
| Bjorn Piltz
 
| Visual C compilation fix
 
| 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
 
|-
 
|-
 
| Manoj Rajagopalan
 
| Manoj Rajagopalan
Line 330: Line 542:
 
| Kenneth Frank Riddile
 
| Kenneth Frank Riddile
 
| Lots of Windows/MSVC compatibility fixes, handling of alignment issues
 
| Lots of Windows/MSVC compatibility fixes, handling of alignment issues
 +
|-
 +
| Richard Roberts
 +
| Bug fix in selection of MKL Householder QR
 
|-
 
|-
 
| Adolfo Rodriguez
 
| Adolfo Rodriguez
Line 336: Line 551:
 
| Peter Román
 
| Peter Román
 
| Support for SuperLU's ILU factorization
 
| Support for SuperLU's ILU factorization
 +
|-
 +
| Oliver Ruepp
 +
| Bug fix in sparse matrix product with row-major matrices
 
|-
 
|-
 
| Radu Bogdan Rusu
 
| Radu Bogdan Rusu
Line 342: Line 560:
 
| Guillaume Saupin
 
| Guillaume Saupin
 
| Skyline matrices
 
| 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
 
| Jakob Schwendner
| Test for unaligned quaternions
+
| Test for unaligned quaternions, Benchmark for Geometry module
 +
|-
 +
| Christian Seiler
 +
| The Tensor module
 
|-
 
|-
 
| Martin Senst
 
| Martin Senst
 
| Bug fix for empty matrices
 
| Bug fix for empty matrices
 
|-
 
|-
| Benjamin Schindler
+
| Sameer Sheorey
| gdb pretty printers
+
| Fix gdb pretty printer for variable-size matrices
 +
|-
 +
| Andy Somerville
 +
| Functions to get intersection between two ParametrizedLines
 
|-
 
|-
 
| Alex Stapleton
 
| Alex Stapleton
 
| Help with tough C++ questions
 
| Help with tough C++ questions
 +
|-
 +
| [http://bsteiner.info 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
 
| Piotr Trojanek
Line 360: Line 611:
 
| Anthony Truchet
 
| Anthony Truchet
 
| Bugfix in QTransform and QMatrix support
 
| Bugfix in QTransform and QMatrix support
 +
|-
 +
| Adolfo Rodriguez Tsourouksdissian
 +
| Version of JacobiSVD that pre-allocates its resources
 
|-
 
|-
 
| James Richard Tyrer
 
| James Richard Tyrer
Line 365: Line 619:
 
|-
 
|-
 
| Rhys Ulerich
 
| Rhys Ulerich
| Pkg-config support
+
| Pkg-config support, improved GDB pretty-printer
 +
|-
 +
| Henry de Valence
 +
| Typo in documentation
 
|-
 
|-
 
| Ingmar Vanhassel
 
| Ingmar Vanhassel
 
| CMake fix
 
| CMake fix
 +
|-
 +
| Michiel Van Dyck
 +
| Multi-threading documentation bug fix
 
|-
 
|-
 
| Scott Wheeler
 
| Scott Wheeler
 
| Documentation improvements
 
| Documentation improvements
 +
|-
 +
| Freddie Witherden
 +
| CMake fixes, allow LevenbergMarquardt to work with non-standard types
 
|-
 
|-
 
| Urs Wolfer
 
| Urs Wolfer
Line 378: Line 641:
 
| Manuel Yguel
 
| Manuel Yguel
 
| Bug fixes, work on inverse-with-check, the Polynomial module
 
| Bug fixes, work on inverse-with-check, the Polynomial module
 +
|-
 +
| Pierre Zoppitelli
 +
| Making a start with a divide-and-conquer SVD implementation
 +
|-
 +
| [https://www.kth.se/profile/jonasadl/ Jonas Adler]
 +
| Bugfixes for CUDA support
 
|}
 
|}
  
Line 385: Line 654:
 
| Intel Corporation
 
| Intel Corporation
 
| SSE code for 4x4 matrix inversion [http://software.intel.com/en-us/articles/optimized-matrix-library-for-use-with-the-intel-pentiumr-4-processors-sse2-instructions/ taken from here].
 
| SSE code for 4x4 matrix inversion [http://software.intel.com/en-us/articles/optimized-matrix-library-for-use-with-the-intel-pentiumr-4-processors-sse2-instructions/ taken from here].
 +
|-
 +
| [http://www.cise.ufl.edu/~davis Tim Davis]
 +
| AMD reordering simplicial sparse Cholesky factorization adapted from [http://www.cise.ufl.edu/research/sparse/SuiteSparse SuiteSparse]
 
|-
 
|-
 
| Julien Pommier
 
| Julien Pommier
| SSE implementation of exp,log,cos,sin math functions from [http://home.gna.org/getfem/gmm_intro.html GMM++]
+
| SSE implementation of exp,log,cos,sin math functions from [http://download.gna.org/getfem/html/homepage/gmm/index.html GMM++]
 +
|-
 +
| [http://www-users.cs.umn.edu/~saad Yousef Saad]
 +
| IncompleteLUT preconditioner coming from [http://www-users.cs.umn.edu/~saad/software/ITSOL ITSOL]
 
|-
 
|-
 
| [http://en.wikipedia.org/wiki/MINPACK Minpack authors]
 
| [http://en.wikipedia.org/wiki/MINPACK Minpack authors]
Line 393: Line 668:
 
|}
 
|}
  
'''Special thanks to''' [[Tuxfamily]] for the wonderful quality of their services!
+
'''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.
 
If you are looking for a BibTeX entry to use to cite Eigen in academic papers, see the [[BibTeX]] page.

Latest revision as of 15:57, 15 July 2019

Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.

Announcements

Eigen 3.3.7 released! (11.12.2018) doc

Eigen 3.3.6 released! (10.12.2018) doc

Eigen 3.3.5 released! (23.07.2018) doc

Eigen now offers a git mirror on github! (29.12.2017) doc

Eigen 3.3.4 released! (15.06.2017) doc

Get it

The latest stable release is Eigen 3.3.7. Get it here: tar.bz2, tar.gz, zip. Changelog.

The latest 3.2.10 (previous series) release is Eigen 3.2.10. Get it here: tar.bz2, tar.gz, zip. Changelog.

The unstable source code from the development branch is there: tar.bz2, tar.gz, zip.

To check out the Eigen repository using Mercurial, also known as "hg", do:

hg clone https://bitbucket.org/eigen/eigen/

There is also an official git mirror on github: https://github.com/eigenteam/eigen-git-mirror.

[ other downloads ] [ browse the source code ]


Overview

  • Eigen is versatile.
    • It supports all matrix sizes, from small fixed-size matrices to arbitrarily large dense matrices, and even sparse matrices.
    • It supports all standard numeric types, including std::complex, integers, and is easily extensible to custom numeric types.
    • It supports various matrix decompositions and geometry features.
    • Its ecosystem of unsupported modules provides many specialized features such as non-linear optimization, matrix functions, a polynomial solver, FFT, and much more.
  • Eigen is fast.
    • Expression templates allow to intelligently remove temporaries and enable lazy evaluation, when that is appropriate.
    • Explicit vectorization is performed for SSE 2/3/4, AVX, AVX2, FMA, AVX512, ARM NEON (32-bit and 64-bit), PowerPC AltiVec/VSX (32-bit and 64-bit), ZVector (s390x/zEC13) SIMD instruction sets, and since 3.4 MIPS MSA with graceful fallback to non-vectorized code.
    • Fixed-size matrices are fully optimized: dynamic memory allocation is avoided, and the loops are unrolled when that makes sense.
    • For large matrices, special attention is paid to cache-friendliness.
  • Eigen is reliable.
    • Algorithms are carefully selected for reliability. Reliability trade-offs are clearly documented and extremely safe decompositions are available.
    • Eigen is thoroughly tested through its own test suite (over 500 executables), the standard BLAS test suite, and parts of the LAPACK test suite.
  • Eigen is elegant.
    • 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.

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: 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.

Eigen is being successfully used with the following compilers:

  • GCC, version 4.8 and newer. Older versions of gcc might work as well but they are not tested anymore.
  • MSVC (Visual Studio), 2012 and newer. Be aware that enabling IntelliSense (/FR flag) is known to trigger some internal compilation errors. The old 3.2 version of Eigen supports MSVC 2010, and the 3.1 version supports MSVC 2008.
  • Intel C++ compiler. Enabling the -inline-forceinline option is highly recommended.
  • LLVM/CLang++, version 3.4 and newer. (The 2.8 version used to work fine, but it is not tested with up-to-date versions of Eigen)
  • XCode 7 and newer. Based on LLVM/CLang.
  • MinGW, recent versions. Based on GCC.
  • QNX's QCC compiler.

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. To file a new bug, go there. See this page for some instructions.

Mailing list

Address: eigen@lists.tuxfamily.org

  • 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.

This mailing list is public and has public archives. The archives are mirrored by gmane.org.

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, Jitse and Christoph). 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

Our IRC channel is #eigen on irc.freenode.net.

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).
  • IFOPT is a modern, light-weight, Eigen-based C++ interface to Nonlinear Programming solvers, such as Ipopt and Snopt.
  • 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.
  • g2o is an open-source C++ framework for optimizing graph-based nonlinear least-square problems.
  • redsvd is a RandomizED Singular Value Decomposition library for sparse or very large dense matrices.
  • trustOptim is a trust-region based non linear solver supporting sparse Hessians (C++ implementation with R binding).
  • Shogun: a large scale machine learning toolbox.
  • Stan: a statistical package based on Eigen that includes a reverse-mode automatic differentiation implementation.
  • StOpt, the STochastic OPTimization library aims at providing tools in C++ for solving some stochastic optimization problems encountered in finance or in the industry.
  • Ceemple is a scientific programming environment allowing to rapidly prototype applications C++ as in MatLab or Python.
  • Nelson an open computing environment for engineering and scientific applications using modern C/C++ libraries (Boost, Eigen, FFTW, …) and others state of art numerical libraries. (GPL2)
  • EigenLab is a header only library to parse and evaluate expressions working on Eigen matrices.
  • SpaFEDte a C++ library for discontinuous Galerkin discretizations on general meshes.
  • biicode a C and C++ dependency manager that #includes the most popular and useful C/C++ libs and frameworks.
  • CERTH's AKSDA: a GPU-accelerated dimensionality reduction and classification method for high-dimensional data.
  • Spectra stands for Sparse Eigenvalue Computation Toolkit as a Redesigned ARPACK. It is a header-only C++ library for large scale eigenvalue problems, built on top of Eigen.
  • preCICE is a coupling library for partitioned multi-physics simulations, including, but not restricted to fluid-structure interaction and conjugate heat transfer simulations. It supports OpenFOAM, CalculiX, SU2, and several other well-known, as well as in-house solvers. It is free/open-source software and its code is available on GitHub under the LGPL3 license. Link to source code and documentation

Bindings

  • The RcppEigen package provides bindings and more for R.
  • minieigen is small boost::python wrapper for Eigen's core classes (dense fixed and dynamic-sized vectors, matrices, aligned boxes, quaternions; with integer, floating and complex scalars) including operators and subset of Eigen's API methods.
  • Eigency is a Cython interface between the numpy arrays and the Matrix/Array classes of the Eigen C++ library.
  • sparray: a python binding of the Sparse module - alpha stage.
  • OCamlEigen, a thin OCaml interface to the Eigen 3 C++ library.
  • haskell-eigen offers bindings for the Haskell language.
  • jeigen, a Java wrapper for Eigen.
  • Eigen4AutoIt, a wrapper for the AutoIt scripting language.
  • eigen-lua, a Lua wrapper around parts of the Eigen numerical library.
  • Eigenpy: Efficient bindings between Numpy and Eigen using Boost.Python with support of the Geometry module

Science

  • 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.
  • Gnu Data Language, a GPL interpretor of IDL syntax codes.
  • The Space Trajectory Analysis project at the European Space Agency. They even have an announcement on using Eigen.
  • Avogadro, an opensource advanced molecular editor.
  • The 3D astronomical visualization application Celestia is now using Eigen for all orbital and geometric calculation.
  • Yade, platform for dynamic particle models, uses Eigen for geometric computations (switched from the WildMagic package)
  • SLangTNG, an application suite for numerical analysis, linear algebra, advanced statistics, FEM, structural dynamics, data visualization, etc.
  • Clip, an opensource program for the orientation of Laue exposures.
  • Multiprecision Computing Toolbox for MATLAB uses Eigen as core library for matrix computations.
  • Pteros, a C++ library for molecular modeling.
  • Cufflinks, a tool for transcript assembly, differential expression, and differential regulation for RNA-Sequences.
  • Vortexje: a GPL library for simulation implementing the source-doublet panel method.
  • Woo(dem), particle dynamics software (DEM, FEM); Eigen wrapped using minieigen in Python.
  • NIMBLE, a system for programming statistical algorithms such as Markov chain Monte Carlo from R. NIMBLE includes a compiler for a subset of R to C++ that uses Eigen.
  • ENigMA is a multiphysics numerical library which uses Eigen.
  • iMSTK is an open source software toolkit written in C++ that aids rapid prototyping of interactive multi-modal surgical simulations.
  • mbsolve is an open-source solver tool for the Maxwell-Bloch equations, which are used to model light-matter interaction in nonlinear optics.
  • Spin-Scenario, a flexible scripting environment for realistic magnetic resonance (NMR/MRI) simulations.
  • Quantum++ is a modern C++11 general purpose quantum computing library, composed solely of template header files.

Robotics and engineering

  • The Yujin Robot company uses Eigen for the navigation and arm control of their next gen robots. (switched from blitz, ublas and tvmet)
  • The Robotic Operating System (ROS) developed by Willow Garage.
  • openAHRS Open Source IMU / AHRS
  • The Darmstadt Dribblers autonomous Humanoid Robot Soccer Team and Darmstadt Rescue Robot Team use Eigen for navigation and world modeling.
  • The Mobile Robot Programming Toolkit (MRPT), a set of libraries for SLAM, localization and computer vision, moved to Eigen (switched from home made math classes).
  • RBDL: a C++ library for rigid body dynamics.
  • RL a self-contained C++ library for robot kinematics, motion planning and control.
  • 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.
  • towr is a light-weight and extensible C++ library for trajectory optimization for legged robots.
  • Pinocchio: a fast and efficient Rigid Body Dynamics library
  • The Humanoid Path Planner: a software for Motion and Manipulation Planning
  • MIRA is a cross-platform framework written in C++ that provides a middleware for the development of complex robotic applications, which consists of distributed software modules.

Computer Graphics, Geometry, Visualization

  • Computational Geometry Algorithms Library (CGAL), a collaborative effort to develop a robust, easy to use, and efficient C++ software library of geometric data structures and algorithms.
  • Point Cloud Library (PCL), a large scale, BSD licensed, open project for point cloud processing. Uses Eigen as their math backend.
  • VcgLib, an opensource C++ template library for the manipulation and processing of triangle and tetrahedral meshes. (switched from home made math classes)
  • MeshLab, an opensource software for the processing and editing of unstructured 3D triangular meshes and point cloud. (switched from vcglib's math classes)
  • eos, an opensource and lightweight 3D Morphable Face Model fitting library in modern C++11/14.
  • The Topology ToolKit (TTK), an open-source library and software collection for topological data analysis in scientific visualization.
  • Theia, an opensource C++ structure from motion library tailored for researchers, BSD licensed.
  • libmv, an opensource structure from motion library. (switched from FLENS)
  • openMVG, a simple library for multiple view geometry.
  • metronome , a simple metric storage/graphing engine using Eigen for SVD least squares interpolation & data consolidation
  • piccante, a C++ imaging library designed for High Dynamic Range (HDR) processing.
  • libigl is a simple C++ geometry processing library with wide functionality.
  • ApproxMVBB is a small library to compute fast approximate oriented bounding boxes of 3D point clouds.
  • Madplotlib makes it easier to plot 2D charts on Qt from data created by Eigen::ArrayXf.
  • 3DF Zephyr is a commercial photogrammetry and 3D modeling software, developed by 3Dflow srl

Mobile apps

  • Layar, an augmented reality application for IPhone and Android.
  • Red Sword Studios, maker of the iPhone games Gradient, Fortress Luna, Stimulus, and Lustre, uses Eigen extensively. Why roll your own matrix/vector/transformation code when there's Eigen?
  • iPerfectPutt, an iPhone game, uses Eigen for 3D geometry calculations.
  • WhirlyGlobe-Maply an open source geospatial display toolkit for iOS and Android. It implements both a 3D interactive globe and a 2D (slippy) map

KDE (our origins!)

  • Step, an educational physics simulator.
  • 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.
  • Kalzium uses Eigen indirectly through the aforementioned Avogadro library.
  • the Mandelbrot wallpaper plugin, some screensavers, kgllib, solidkreator, etc.


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
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
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
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
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
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
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:

Intel Corporation SSE code for 4x4 matrix inversion taken from here.
Tim Davis AMD reordering simplicial sparse Cholesky factorization adapted from SuiteSparse
Julien Pommier SSE implementation of exp,log,cos,sin math functions from GMM++
Yousef Saad IncompleteLUT preconditioner coming from ITSOL
Minpack authors Algorithms for non linear optimization.

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.