He reunido lo siguiente de la investigación en línea hasta ahora:
Utilicé Armadillo un poco y encontré que la interfaz era lo suficientemente intuitiva, y fue fácil localizar paquetes binarios para Ubuntu (y supongo que otras distribuciones de Linux). No lo he compilado desde la fuente, pero espero que no sea demasiado difícil. Cumple con la mayoría de mis criterios de diseño y utiliza álgebra lineal densa. Puede llamar a las rutinas LAPACK o MKL. En general, no es necesario compilar Armadillo, es una biblioteca basada exclusivamente en plantillas: solo incluye el encabezado y el enlace a BLAS / LAPACK o MKL, etc.
He escuchado cosas buenas sobre Eigen , pero no lo he usado. Se dice ser rápida , utiliza plantillas, y es compatible con el álgebra lineal densa. No tiene LAPACK o BLAS como dependencia, pero parece ser capaz de hacer todo lo que LAPACK puede hacer (además de algunas cosas que LAPACK no puede). Muchos proyectos usan Eigen, lo cual es prometedor. Tiene un paquete binario para Ubuntu, pero como biblioteca de solo encabezado, es trivial de usar también en otros lugares.
La versión 4 de Matrix Template Library también parece prometedora y utiliza plantillas. Admite álgebra lineal densa y dispersa, y puede llamar a UMFPACK como un solucionador disperso. Las características no están claras en su sitio web. Tiene un paquete binario para Ubuntu, descargable desde su sitio web.
PETSc , escrito por un equipo del Laboratorio Nacional de Argonne, tiene acceso a solucionadores lineales dispersos y densos, por lo que supongo que puede funcionar como una biblioteca matricial. Está escrito en C, pero creo que tiene enlaces de C ++ (e incluso si no fuera así, llamar a C desde C ++ no es un problema). La documentación es increíblemente completa. El paquete es un poco exagerado para lo que quiero hacer ahora (multiplicación e indexación de matrices para configurar programas lineales de enteros mixtos), pero podría ser útil como un formato de matriz para mí en el futuro, o para otras personas que tienen necesidades diferentes que yo
Trilinos , escrito por un equipo del Sandia National Laboratory, proporciona interfaces C ++ orientadas a objetos para matrices densas y dispersas a través de su componente Epetra, e interfaces con plantillas para matrices densas y dispersas a través de su componente Tpetra. También tiene componentes que brindan funcionalidad de solucionador lineal y de solución propia. La documentación no parece ser tan pulida o prominente como PETSc; Trilinos parece el análogo de Sandia de PETSc. PETSc puede llamar a algunos de los solucionadores de Trilinos. Los binarios para Trilinos están disponibles para Linux.
Blitz es una biblioteca orientada a objetos de C ++ que tiene binarios de Linux. No parece mantenerse activamente (29-06-2012: ¡acaba de aparecer una nueva versión ayer!), Aunque la lista de correo está activa, por lo que hay alguna comunidad que la usa. No parece hacer mucho en la forma de álgebra lineal numérica más allá de BLAS, y parece una biblioteca de matriz densa. Utiliza plantillas.
Boost :: uBLAS es una biblioteca orientada a objetos C ++ y parte del proyecto Boost. Admite plantillas y álgebra lineal numérica densa. He oído que no es particularmente rápido.
La Plantilla numérico Toolkit es una biblioteca de C ++ orientado a objetos desarrollado por NIST. Su autor, Roldan Pozo, parece contribuir con parches ocasionalmente, pero ya no parece estar en desarrollo activo (la última actualización fue 2010). Se enfoca en álgebra lineal densa y proporciona interfaces para algunas descomposiciones de matriz básicas y un solucionador de valores propios.
Elemental , desarrollado por Jack Poulson, es un paquete de software de álgebra lineal densa de memoria distribuida (paralela) escrito en un estilo similar a FLAME . Para obtener una lista de características y antecedentes del proyecto, consulte su documentación . FLAME tiene una biblioteca asociada para álgebra lineal densa secuencial y de memoria compartida, llamada libflame , que parece estar escrita en C. orientada a objetos. las bibliotecas de álgebra lineal son más una ciencia y menos un arte negro.
Hay otras bibliotecas que se pueden agregar a la lista; Si contamos los paquetes de álgebra lineal dispersos como "bibliotecas matriciales", la mejor libre que conozco en C es SuiteSparse , que está programada en estilo orientado a objetos. He usado SuiteSparse y me resultó bastante fácil de aprender; depende de BLAS y LAPACK para algunos de los algoritmos que descomponen problemas dispersos en muchos subproblemas de álgebra lineal pequeños y densos. El autor principal del paquete, Tim Davis, es increíblemente útil y un gran tipo versátil.
Los Harwell subrutinas Las bibliotecas son famosos por sus escasas rutinas de álgebra lineal, y son gratis para los usuarios académicos, aunque tenga que pasar por este proceso de llenar un formulario y recibir un correo electrónico para cada archivo que desea descargar. Dado que las subrutinas a menudo tienen dependencias, el uso de un solucionador puede requerir la descarga de cinco o seis archivos, y el proceso puede volverse algo tedioso, especialmente porque la aprobación del formulario no es instantánea.
También hay otros solucionadores de álgebra lineal dispersos, pero por lo que puedo decir, MUMPS y otros paquetes se centran principalmente en la solución de sistemas lineales, y resolver sistemas lineales es la menor de mis preocupaciones en este momento. (Tal vez más tarde, necesitaré esa funcionalidad, y podría ser útil para otros).