Ich habe bisher Folgendes aus der Online-Forschung zusammengetragen:
Ich habe Armadillo ein wenig benutzt und fand die Oberfläche intuitiv genug und es war einfach, Binärpakete für Ubuntu zu finden (und ich gehe von anderen Linux-Distributionen aus). Ich habe es nicht aus dem Quellcode zusammengestellt, aber ich hoffe, dass es nicht zu schwierig wird. Es erfüllt die meisten meiner Entwurfskriterien und verwendet eine dichte lineare Algebra. Es kann LAPACK- oder MKL-Routinen aufrufen. Es ist in der Regel nicht erforderlich, Armadillo zu kompilieren. Es handelt sich um eine rein vorlagenbasierte Bibliothek. Sie müssen nur den Header und den Link zu BLAS / LAPACK oder MKL usw. einfügen.
Ich habe gute Dinge über Eigen gehört , es aber nicht benutzt. Es behauptet, schnell zu sein , verwendet Templating und unterstützt dichte lineare Algebra. Es hat weder LAPACK noch BLAS als Abhängigkeit, scheint aber in der Lage zu sein, alles zu tun, was LAPACK kann (plus einige Dinge, die LAPACK nicht kann). Viele Projekte verwenden Eigen, was vielversprechend ist. Es hat ein Binärpaket für Ubuntu, aber als reine Header-Bibliothek ist es trivial, es auch anderswo zu verwenden.
Die Matrix Template Library Version 4 sieht ebenfalls vielversprechend aus und verwendet Vorlagen . Es unterstützt lineare Algebra mit und ohne Dichte und kann UMFPACK als Solver mit geringer Dichte aufrufen . Die Funktionen sind auf ihrer Website etwas unklar. Es gibt ein Binärpaket für Ubuntu, das von der Website heruntergeladen werden kann.
PETSc , das von einem Team des Argonne National Laboratory geschrieben wurde, hat Zugriff auf spärliche und dichte lineare Löser, daher gehe ich davon aus, dass es als Matrixbibliothek fungieren kann. Es ist in C geschrieben, hat aber C ++ - Bindungen, denke ich (und selbst wenn nicht, ist das Aufrufen von C aus C ++ kein Problem). Die Dokumentation ist unglaublich gründlich. Das Paket ist ein bisschen übertrieben für das, was ich jetzt tun möchte (Matrixmultiplikation und Indexierung zum Einrichten von linearen Programmen mit gemischten Ganzzahlen), könnte aber in Zukunft als Matrixformat für mich oder für andere Personen mit anderen Bedürfnissen nützlich sein als ich.
Trilinos , geschrieben von einem Team des Sandia National Laboratory, bietet in seiner Epetra-Komponente objektorientierte C ++ - Schnittstellen für dichte und spärliche Matrizen und in seiner Tpetra-Komponente vorgefertigte Schnittstellen für dichte und spärliche Matrizen. Es enthält auch Komponenten, die lineare Lösungs- und Eigensolverfunktionen bereitstellen. Die Dokumentation scheint nicht so ausgefeilt oder auffällig zu sein wie PETSc. Trilinos scheint das Sandia-Analogon von PETSc zu sein. PETSc kann einige der Trilinos-Löser aufrufen. Binärdateien für Trilinos sind für Linux verfügbar.
Blitz ist eine objektorientierte C ++ - Bibliothek mit Linux-Binärdateien. Es scheint nicht aktiv gewartet zu werden (2012-06-29: Eine neue Version ist erst gestern erschienen!), Obwohl die Mailingliste aktiv ist, so dass es eine Community gibt, die sie verwendet. Es scheint nicht viel für die numerische lineare Algebra jenseits von BLAS zu tun und sieht aus wie eine dichte Matrixbibliothek. Es werden Vorlagen verwendet.
Boost :: uBLAS ist eine objektorientierte C ++ - Bibliothek und Teil des Boost-Projekts. Es unterstützt Templating und dichte numerische lineare Algebra. Ich habe gehört, es ist nicht besonders schnell.
Das Template Numerical Toolkit ist eine von NIST entwickelte objektorientierte C ++ - Bibliothek. Sein Autor, Roldan Pozo, scheint gelegentlich Patches beizusteuern, aber es scheint nicht mehr in aktiver Entwicklung zu sein (letztes Update war 2010). Es konzentriert sich auf die dichte lineare Algebra und bietet Schnittstellen für einige grundlegende Matrixzerlegungen und einen Eigenwertlöser.
Elemental , entwickelt von Jack Poulson, ist ein (paralleles) lineares Algebra-Softwarepaket mit verteiltem Speicher, das in einem ähnlichen Stil wie FLAME geschrieben wurde . Eine Liste der Funktionen und Hintergrundinformationen zum Projekt finden Sie in seiner Dokumentation . FLAME selbst hat eine Bibliothek für sequentielle und gemeinsam genutzte, dichte lineare Algebra namens libflame , die in objektorientiertem C geschrieben zu sein scheint. Libflame ähnelt LAPACK, hat jedoch eine bessere Notation, die den Algorithmen zugrunde liegt, um die Entwicklung schneller numerischer Werte zu ermöglichen lineare algebra bibliotheken eher eine wissenschaft und weniger eine schwarze kunst.
Es gibt andere Bibliotheken, die der Liste hinzugefügt werden können. Wenn wir spärliche lineare Algebra-Pakete als "Matrix-Bibliotheken" zählen, ist SuiteSparse , das objektorientiert programmiert ist , das beste freie, das ich in C kenne . Ich habe SuiteSparse verwendet und fand es ziemlich einfach, es zu erlernen. Es hängt von BLAS und LAPACK für einige der Algorithmen ab, die spärliche Probleme in viele kleine, dichte lineare Algebra-Teilprobleme zerlegen. Der Hauptautor des Pakets, Tim Davis, ist unglaublich hilfsbereit und ein großartiger Allrounder.
Die Harwell-Subroutinenbibliotheken sind für ihre spärlichen linearen Algebra-Routinen bekannt und für akademische Benutzer kostenlos. Sie müssen jedoch diesen Prozess durchlaufen, indem Sie ein Formular ausfüllen und für jede Datei, die Sie herunterladen möchten, eine E-Mail erhalten. Da die Unterprogramme häufig Abhängigkeiten aufweisen, muss bei Verwendung eines Solvers möglicherweise fünf oder sechs Dateien heruntergeladen werden, und der Vorgang kann etwas langwierig werden, insbesondere weil die Formulargenehmigung nicht sofort erfolgt.
Es gibt auch andere spärliche lineare Algebra-Löser, aber soweit ich das beurteilen kann, konzentrieren sich MUMPS und andere Pakete hauptsächlich auf die Lösung linearer Systeme, und das Lösen linearer Systeme ist momentan das geringste meiner Probleme. (Vielleicht benötige ich diese Funktionalität später, und sie könnte für andere nützlich sein.)