Description
Eigen est une bibliothèque C++ open source dédiée au calcul matriciel, à l’algèbre linéaire et aux opérations numériques.
Elle fournit des structures de données et des algorithmes performants pour manipuler des vecteurs, des matrices, des décompositions, des systèmes linéaires et des transformations géométriques.
Eigen est une bibliothèque « header-only », ce qui signifie qu’elle ne nécessite pas de compilation ni d’édition de liens supplémentaire.
L’objectif est d’offrir une bibliothèque à la fois simple d’utilisation, portable et optimisée pour les applications scientifiques, l’ingénierie, la robotique et le calcul haute performance.
Mise en place de l’environnement
ml libs/eigen
- Version(s) disponible(s) : 3.4.1
Tutoriel
Cas d’usage : résolution d’un système linéaire
- L’objectif de cet exemple est de résoudre un système linéaire de la forme :
- où est la matrice des coefficients, b le vecteur second membre, et le vecteur des inconnues.
- Créer le fichier
resolution.cpp
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
// Définition de la matrice A
Matrix3d A;
A << 3, 2, -1,
2, -2, 4,
-1, 0.5, -1;
// Définition du vecteur b
Vector3d b;
b << 1, -2, 0;
// Résolution du système Ax = b
Vector3d x = A.colPivHouseholderQr().solve(b);
// Affichage
std::cout << "Resolution du systeme lineaire A * x = b\n\n";
std::cout << "Matrice A =\n";
std::cout << A << "\n\n";
std::cout << "Vecteur b =\n";
std::cout << b << "\n\n";
std::cout << "Solution x =\n";
std::cout << x << std::endl;
return 0;
}
- Compiler
ml libs/eigen
g++ -O3 -std=c++17 resolution.cpp -o resolution
- Exécuter dans un job
srun ./resolution
Remarque : le module libs/eigen doit être chargé dans l’environnement du shell ou du job avant de compiler et avant d’exécuter le programme.