Difference between revisions of "Main Page"
|Line 346:||Line 346:|
| Jeff "complexzeros"
| Jeff "complexzeros"
| Spline interpolation with derivatives
| Spline interpolation with derivatives
| Marton Danoczy
| Marton Danoczy
Revision as of 15:15, 7 October 2020
Eigen 3.3.9 released! (04.12.2020)
Eigen on Discord (16.11.2020)
Join our Discord server to discuss Eigen-related topics with other users and developers.
Eigen 3.3.8 released! (05.10.2020)
Eigen is now on GitLab.com (30.07.2020)
Details on the migration process:
To check out the Eigen repository using Git, do:
git clone https://gitlab.com/libeigen/eigen.git
- Eigen is versatile.
- It supports various matrix decompositions and geometry features.
- Eigen is fast.
- For large matrices, special attention is paid to cache-friendliness.
- Eigen is reliable.
- Eigen is elegant.
- Implementing an algorithm on top of Eigen feels like just copying pseudocode.
Eigen doesn't have any dependencies other than the C++ standard library.
Earlier versions were licensed under the LGPL3+.
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.
- 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.
Need help using Eigen? Try this:
- To get help, stackoverflow is your best resource. You can also search within the forum archives.
- You can always try our IRC channel.
- Want to discuss something with the developers? Use our mailing list.
- To subscribe, send a mail with subject subscribe to firstname.lastname@example.org
- To unsubscribe, send a mail with subject unsubscribe to email@example.com
Important: You must subscribe before you may post. Sorry, this is our only way to prevent 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, 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.
Contributing to Eigen
Projects using Eigen
Extensions, numerical computation
- Google's TensorFlow is an Open Source Software Library for Machine Intelligence
- IFOPT is a modern, light-weight, Eigen-based C++ interface to Nonlinear Programming solvers, such as Ipopt and Snopt.
- 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.
- Shogun: a large scale machine learning toolbox.
- 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.
- 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
- The RcppEigen package provides bindings and more for R.
- 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
- FlexibleSUSY, a spectrum generator which calculates the masses of elementary particles.
- Gnu Data Language, a GPL interpretor of IDL syntax codes.
- Avogadro, an opensource advanced molecular editor.
- 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.
- 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.
- 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.
- elsa, an elegant framework for tomographic reconstruction.
- Quit, a collection of programs for processing quantitative MRI data.
Robotics and engineering
- The Robotic Operating System (ROS) developed by Willow Garage.
- openAHRS Open Source IMU / AHRS
- RBDL: a C++ library for rigid body dynamics.
- RL a self-contained C++ library for robot kinematics, motion planning and control.
- 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
- 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.
- piccante, a C++ imaging library designed for High Dynamic Range (HDR) processing.
- libigl is a simple C++ geometry processing library with wide functionality.
- 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
- Layar, an augmented reality application for IPhone and Android.
KDE (our origins!)
- Step, an educational physics simulator.
- Calligra Sheets, the spreadsheet module of KDE's office suite uses Eigen for matrix functions such as MINVERSE, MMULT, MDETERM.
- Krita, a professional free and open-source painting program
- 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!
|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|
|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|
|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|
|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.|
If you are looking for a BibTeX entry to use to cite Eigen in academic papers, see the BibTeX page.