Reunimos o seguinte da pesquisa on-line até agora:
Eu usei o Armadillo um pouco e achei a interface bastante intuitiva, e foi fácil localizar pacotes binários para o Ubuntu (e estou assumindo outras distros do Linux). Não o compilei da fonte, mas minha esperança é que não seja muito difícil. Ele atende à maioria dos meus critérios de design e usa álgebra linear densa. Pode chamar rotinas LAPACK ou MKL. Geralmente, não é necessário compilar o Armadillo, é uma biblioteca puramente baseada em modelos: você apenas inclui o cabeçalho e o link para BLAS / LAPACK ou MKL etc.
Ouvi coisas boas sobre Eigen , mas não usei. Ele afirma ser rápido , usa modelagem e suporta álgebra linear densa. Ele não possui LAPACK ou BLAS como dependência, mas parece capaz de fazer tudo o que o LAPACK pode fazer (além de algumas coisas que o LAPACK não pode). Muitos projetos usam o Eigen, o que é promissor. Ele tem um pacote binário para o Ubuntu, mas como uma biblioteca somente de cabeçalho, é trivial usar também em outros lugares.
A versão 4 da Matrix Template Library também parece promissora e usa modelos. Ele suporta álgebra linear densa e esparsa e pode chamar UMFPACK como um solucionador esparso. Os recursos não são claros em seu site. Possui um pacote binário para o Ubuntu, disponível para download em seu site.
O PETSc , escrito por uma equipe do Laboratório Nacional de Argonne, tem acesso a solucionadores lineares esparsos e densos, por isso presumo que ele possa funcionar como uma biblioteca de matrizes. Está escrito em C, mas acho que possui ligações C ++ (e mesmo que não tenha, chamar C em C ++ não é problema). A documentação é incrivelmente completa. O pacote é um pouco exagerado para o que eu quero fazer agora (multiplicação e indexação de matrizes para configurar programas lineares com números inteiros mistos), mas pode ser útil como um formato de matriz para mim no futuro ou para outras pessoas com necessidades diferentes do que eu.
O Trilinos , escrito por uma equipe do Sandia National Laboratory, fornece interfaces C ++ orientadas a objetos para matrizes densas e esparsas através de seu componente Epetra e interfaces modeladas para matrizes densas e esparsas através de seu componente Tpetra. Ele também possui componentes que fornecem a funcionalidade linear de resolução e eigensolver. A documentação não parece ser tão polida ou proeminente quanto o PETSc; Trilinos parece o análogo Sandia do PETSc. O PETSc pode chamar alguns dos solucionadores de Trilinos. Binários para Trilinos estão disponíveis para Linux.
O Blitz é uma biblioteca orientada a objetos C ++ que possui binários Linux. Ele não parece ser mantido ativamente (29/06/2012: uma nova versão apareceu ontem!), Embora a lista de emails esteja ativa, há uma comunidade que a usa. Parece não fazer muito em termos de álgebra linear numérica além do BLAS e parece uma biblioteca de matrizes densa. Ele usa modelos.
Boost :: uBLAS é uma biblioteca orientada a objetos C ++ e parte do projeto Boost. Ele suporta álgebra linear numérica densa e de modelos. Ouvi dizer que não é particularmente rápido.
O Template Numerical Toolkit é uma biblioteca orientada a objetos C ++ desenvolvida pelo NIST. Seu autor, Roldan Pozo, parece contribuir com patches ocasionalmente, mas não parece mais estar em desenvolvimento ativo (a última atualização foi em 2010). Ele se concentra na álgebra linear densa e fornece interfaces para algumas decomposições básicas da matriz e um solucionador de autovalores.
Elemental , desenvolvido por Jack Poulson, é um pacote de software de álgebra linear denso de memória distribuída (paralela) escrito em um estilo semelhante ao FLAME . Para uma lista de recursos e antecedentes do projeto, consulte a documentação dele . O próprio FLAME possui uma biblioteca associada para álgebra linear densa de memória compartilhada e seqüencial, chamada libflame , que parece ser escrita em C. orientada a objetos. Libflame se parece muito com LAPACK, mas com uma melhor notação subjacente aos algoritmos para desenvolver o desenvolvimento numérico rápido bibliotecas de álgebra linear mais de uma ciência e menos de uma arte negra.
Existem outras bibliotecas que podem ser adicionadas à lista; se estivermos contando pacotes de álgebra linear esparsos como "bibliotecas matriciais", o melhor gratuito que conheço em C é o SuiteSparse , programado no estilo orientado a objetos. Eu usei o SuiteSparse e achei bastante fácil de pegar; depende de BLAS e LAPACK para alguns dos algoritmos que decompõem problemas esparsos em muitos subproblemas pequenos e densos de álgebra linear. O principal autor do pacote, Tim Davis, é incrivelmente útil e um ótimo cara.
As bibliotecas de sub-rotinas Harwell são famosas por suas rotinas esparsas de álgebra linear e são gratuitas para usuários acadêmicos, embora você precise passar por esse processo de preenchimento de um formulário e de receber um e-mail para cada arquivo que deseja baixar. Como as sub-rotinas geralmente têm dependências, o uso de um solucionador pode exigir o download de cinco ou seis arquivos, e o processo pode ser entediante, principalmente porque a aprovação do formulário não é instantânea.
Também existem outros solucionadores de álgebra linear esparsos, mas até onde eu sei, o MUMPS e outros pacotes estão focados principalmente na solução de sistemas lineares, e resolver sistemas lineares é a menor das minhas preocupações no momento. (Talvez mais tarde, precisarei dessa funcionalidade e poderá ser útil para outras pessoas.)