Finora ho raccolto quanto segue dalla ricerca online:
Ho usato Armadillo un po ', e ho trovato l'interfaccia abbastanza intuitiva, ed è stato facile trovare pacchetti binari per Ubuntu (e presumo che siano altre distribuzioni Linux). Non l'ho compilato dalla fonte, ma la mia speranza è che non sia troppo difficile. Soddisfa la maggior parte dei miei criteri di progettazione e utilizza una densa algebra lineare. Può chiamare routine LAPACK o MKL. Generalmente non è necessario compilare Armadillo, è una libreria puramente basata su template: devi solo includere l'intestazione e il link a BLAS / LAPACK o MKL ecc.
Ho sentito cose positive su Eigen , ma non l'ho usato. Essa sostiene di essere veloce , utilizza template, e supporta algebra lineare denso. Non ha LAPACK o BLAS come dipendenza, ma sembra essere in grado di fare tutto ciò che LAPACK può fare (più alcune cose che LAPACK non può fare). Molti progetti usano Eigen, il che è promettente. Ha un pacchetto binario per Ubuntu, ma come libreria solo intestazione è banale usare anche altrove.
Anche Matrix Template Library versione 4 sembra promettente e utilizza il modello. Supporta algebra lineare sia densa che sparsa e può chiamare UMFPACK come risolutore rado. Le funzionalità non sono chiare dal loro sito Web. Ha un pacchetto binario per Ubuntu, scaricabile dal loro sito web.
PETSc , scritto da un team dell'Argonne National Laboratory, ha accesso a solutori lineari sparsi e densi, quindi presumo che possa funzionare come una libreria di matrici. È scritto in C, ma ha collegamenti C ++, penso (e anche se non lo fosse, chiamare C da C ++ non è un problema). La documentazione è incredibilmente completa. Il pacchetto è un po 'eccessivo per quello che voglio fare ora (moltiplicazione di matrice e indicizzazione per impostare programmi lineari a numero intero misto), ma potrebbe essere utile come formato matrice per me in futuro o per altre persone che hanno esigenze diverse di me.
Trilinos , scritto da un team del Sandia National Laboratory, fornisce interfacce C ++ orientate agli oggetti per matrici dense e sparse attraverso il suo componente Epetra e interfacce modellate per matrici dense e sparse attraverso il suo componente Tpetra. Ha anche componenti che forniscono funzionalità di risoluzione lineare ed eigensolver. La documentazione non sembra essere così lucida o importante come PETSc; Trilinos sembra l'analogo Sandia di PETSc. PETSc può chiamare alcuni dei solutori di Trilinos. I binari per i trilinos sono disponibili per Linux.
Blitz è una libreria orientata agli oggetti C ++ con binari Linux. Non sembra essere attivamente mantenuto (29/06/2012: una nuova versione è appena apparsa ieri!), Sebbene la mailing list sia attiva, quindi c'è una comunità che la utilizza. Non sembra fare molto in termini di algebra lineare numerica oltre BLAS e sembra una libreria a matrice densa. Utilizza modelli.
Boost :: uBLAS è una libreria orientata agli oggetti C ++ e parte del progetto Boost. Supporta l'algebra lineare numerica modellante e densa. Ho sentito che non è particolarmente veloce.
Il modello numerico Toolkit è una libreria C ++ orientata agli oggetti sviluppato dal NIST. Il suo autore, Roldan Pozo, sembra contribuire occasionalmente alle patch, ma non sembra più essere in fase di sviluppo attivo (l'ultimo aggiornamento è stato il 2010). Si concentra su una densa algebra lineare e fornisce interfacce per alcune scomposizioni di matrici di base e un risolutore di autovalori.
Elemental , sviluppato da Jack Poulson, è un pacchetto software di algebra lineare densa di memoria distribuita (parallela) scritto in uno stile simile a FLAME . Per un elenco di funzionalità e informazioni di base sul progetto, consultare la sua documentazione . FLAME stesso ha una libreria associata per l'algebra lineare densa di memoria sequenziale e condivisa, chiamata libflame , che sembra essere scritta in C. orientata agli oggetti. Assomiglia molto a LAPACK, ma con una migliore notazione alla base degli algoritmi per rendere rapido lo sviluppo numerico biblioteche di algebra lineare più di una scienza e meno di un'arte nera.
Ci sono altre librerie che possono essere aggiunte all'elenco; se contiamo i pacchetti di algebra lineare sparsa come "librerie di matrici", il migliore che io conosca in C è SuiteSparse , che è programmato in stile orientato agli oggetti. Ho usato SuiteSparse e l'ho trovato abbastanza facile da raccogliere; dipende da BLAS e LAPACK per alcuni degli algoritmi che decompongono i problemi sparsi in molti sottoproblemi di algebra lineare piccola e densa. L'autore principale del pacchetto, Tim Davis, è incredibilmente disponibile e un ragazzo eccezionale.
Le librerie di subroutine di Harwell sono famose per le loro sparse routine di algebra lineare e sono gratuite per gli utenti accademici, anche se è necessario seguire questo processo di compilazione di un modulo e ricezione di un'e-mail per ogni file che si desidera scaricare. Poiché le subroutine hanno spesso dipendenze, l'utilizzo di un solutore potrebbe richiedere il download di cinque o sei file e il processo può diventare un po 'noioso, soprattutto perché l'approvazione del modulo non è istantanea.
Esistono anche altri risolutori di algebra lineare sparsa, ma per quanto ne so, MUMPS e altri pacchetti sono focalizzati principalmente sulla soluzione di sistemi lineari, e la risoluzione dei sistemi lineari è la mia preoccupazione al momento. (Forse più tardi, avrò bisogno di quella funzionalità e potrebbe essere utile per gli altri.)