J'ai rassemblé les informations suivantes issues de recherches en ligne jusqu'à présent:
J'ai un peu utilisé Armadillo et j'ai trouvé l'interface assez intuitive. Il était donc facile de localiser les paquets binaires pour Ubuntu (et je suppose d'autres distributions Linux). Je ne l’ai pas compilé à partir de la source, mais j’espère que ce ne sera pas trop difficile. Il répond à la plupart de mes critères de conception et utilise une algèbre linéaire dense. Il peut appeler des routines LAPACK ou MKL. Il n’est généralement pas nécessaire de compiler Armadillo, il s’agit d’une bibliothèque purement basée sur des modèles: vous n’incluez que l’en-tête et le lien vers BLAS / LAPACK ou MKL, etc.
J'ai entendu de bonnes choses à propos d' Eigen , mais je ne les ai pas utilisées. Il prétend être rapide , utilise des modèles et prend en charge l'algèbre linéaire dense. LAPACK ou BLAS n’est pas une dépendance, mais semble pouvoir faire tout ce que LAPACK peut faire (plus certaines choses que LAPACK ne peut pas faire). Beaucoup de projets utilisent Eigen, ce qui est prometteur. Il contient un paquet binaire pour Ubuntu, mais en tant que bibliothèque contenant uniquement des en-têtes, il est également facile de l’utiliser ailleurs.
La version 4 de la bibliothèque de modèles de matrice semble également prometteuse et utilise des modèles. Il prend en charge l'algèbre linéaire dense et creuse , et peut appeler UMFPACK en tant que solveur crépus . Les fonctionnalités ne sont pas claires de leur site Web. Il contient un paquet binaire pour Ubuntu, téléchargeable à partir de leur site web.
PETSc , écrit par une équipe du Laboratoire National d'Argonne, a accès à des solveurs linéaires rares et denses. Je suppose donc qu'il peut fonctionner comme une bibliothèque matricielle. Il est écrit en C, mais a des liaisons C ++, je pense (et même si ce n’était pas le cas, appeler C depuis C ++ n’était pas un problème). La documentation est incroyablement complète. Le paquet est un peu excessif pour ce que je veux faire maintenant (multiplication et index matriciels pour mettre en place des programmes linéaires à nombres entiers mixtes), mais pourrait être utile comme format matriciel pour moi à l'avenir, ou pour d'autres personnes ayant des besoins différents que moi.
Trilinos , écrit par une équipe du Sandia National Laboratory, fournit des interfaces C ++ orientées objet pour les matrices denses et clairsemées via son composant Epetra et des interfaces modélisées pour les matrices denses et clairsemées via son composant Tpetra. Il comporte également des composants fournissant des fonctionnalités de résolution linéaire et de résolution propre. La documentation ne semble pas être aussi raffinée ni aussi visible que PETSc; Trilinos ressemble à l'analogue Sandia de PETSc. PETSc peut appeler certains des solveurs Trilinos. Les fichiers binaires pour Trilinos sont disponibles pour Linux.
Blitz est une bibliothèque C ++ orientée objet qui comporte des binaires Linux. Elle ne semble pas être activement maintenue (2012-06-29: une nouvelle version vient de paraître hier!), Bien que la liste de diffusion soit active, il y a donc une communauté qui l'utilise. Il ne semble pas que l'algèbre linéaire numérique soit très efficace au-delà de BLAS et ressemble à une bibliothèque matricielle dense. Il utilise des modèles.
Boost :: uBLAS est une bibliothèque orientée objet C ++ qui fait partie du projet Boost. Il prend en charge l'algèbre linéaire numérique modèle et dense. J'ai entendu dire que ce n'est pas particulièrement rapide.
Le modèle Numerical Toolkit est une bibliothèque orientée objet C ++ développée par NIST. Son auteur, Roldan Pozo, semble contribuer occasionnellement aux correctifs, mais il ne semble plus être en développement actif (la dernière mise à jour date de 2010). Il se concentre sur l'algèbre linéaire dense et fournit des interfaces pour certaines décompositions matricielles de base et un résolveur de valeurs propres.
Elemental , développé par Jack Poulson, est un progiciel d'algèbre linéaire dense à mémoire distribuée (parallèle) écrit dans un style similaire à FLAME . Pour une liste des fonctionnalités et du contexte du projet, consultez sa documentation . FLAME lui-même a une bibliothèque associée pour l'algèbre linéaire dense séquentielle et à mémoire partagée, appelée libflame , qui semble être écrite en C. orienté objet. Libflame ressemble beaucoup à LAPACK, mais avec une meilleure notation sous-jacente aux algorithmes permettant le développement de bibliothèques d'algèbre linéaire plus d'une science et moins d'un art noir.
Il existe d'autres bibliothèques qui peuvent être ajoutées à la liste. si nous comptons les paquets algébriques linéaires clairsemés comme des "bibliothèques de matrices", le meilleur que je connaisse en C est SuiteSparse , qui est programmé dans un style orienté objet. J'ai utilisé SuiteSparse et l'ai trouvé assez facile à prendre en main. cela dépend de BLAS et de LAPACK pour certains des algorithmes qui décomposent des problèmes épars en beaucoup de sous-problèmes d'algèbre linéaire petits et denses. L'auteur principal de la trousse, Tim Davis, est incroyablement serviable et polyvalent.
Les bibliothèques de sous-routines Harwell sont célèbres pour leurs routines d'algèbre linéaire éparses et sont gratuites pour les utilisateurs académiques, bien que vous deviez suivre ce processus consistant à remplir un formulaire et à recevoir un e-mail pour chaque fichier à télécharger. Comme les sous-routines ont souvent des dépendances, l’utilisation d’un résolveur peut nécessiter le téléchargement de cinq ou six fichiers, et le processus peut s'avérer fastidieux, d’autant plus que l’approbation du formulaire n’est pas instantanée.
Il existe également d'autres solutions simples à l'algèbre linéaire, mais pour autant que je sache , MUMPS et d'autres packages sont principalement dédiés à la solution de systèmes linéaires, et la résolution de systèmes linéaires est la moindre de mes préoccupations pour le moment. (Peut-être que plus tard, j'aurai besoin de cette fonctionnalité, qui pourrait être utile pour d'autres.)