На данный момент я собрал следующее из онлайн-исследований:
Я немного использовал Armadillo и обнаружил, что интерфейс достаточно интуитивно понятен, и было легко найти бинарные пакеты для Ubuntu (и я предполагаю, что другие дистрибутивы Linux). Я не скомпилировал его из источника, но надеюсь, что это не будет слишком сложно. Он соответствует большинству моих критериев проектирования и использует плотную линейную алгебру. Он может вызывать подпрограммы LAPACK или MKL. Как правило, нет необходимости компилировать Armadillo, это библиотека исключительно на основе шаблонов: вы просто включаете заголовок и ссылку на BLAS / LAPACK или MKL и т. Д.
Я слышал хорошие вещи об Эйгене , но не использовал его. Он претендует на скорость , использует шаблоны и поддерживает плотную линейную алгебру. Он не имеет LAPACK или BLAS в качестве зависимости, но, похоже, способен делать все, что может делать LAPACK (плюс некоторые вещи, которые LAPACK не может). Многие проекты используют Eigen, который является перспективным. У него есть бинарный пакет для Ubuntu, но в качестве библиотеки только для заголовков тривиально использовать ее и в других местах.
Matrix Template Library версия 4 также выглядит многообещающей, и использует шаблонизацию. Он поддерживает как плотную, так и разреженную линейную алгебру, и может вызывать UMFPACK как разреженный решатель. Функции несколько неясны на их сайте. У него есть бинарный пакет для Ubuntu, который можно загрузить с их сайта.
PETSc , созданный командой из Аргоннской национальной лаборатории, имеет доступ к разреженным и плотным линейным решателям, поэтому я предполагаю, что он может функционировать как матричная библиотека. Он написан на C, но, как мне кажется, имеет привязки к C ++ (и даже если нет, вызов C из C ++ не проблема). Документация невероятно тщательная. Пакет немного излишним для того, что я хочу сделать сейчас (умножение матриц и индексирование для создания смешанных целочисленных линейных программ), но может быть полезно в качестве матричного формата для меня в будущем или для других людей, у которых другие потребности чем я.
Trilinos , написанный группой из Национальной лаборатории Sandia, предоставляет объектно-ориентированные интерфейсы C ++ для плотных и разреженных матриц через компонент Epetra, а также шаблонные интерфейсы для плотных и разреженных матриц через компонент Tpetra. У этого также есть компоненты, которые обеспечивают линейный решатель и функциональность eigensolver. Документация не выглядит такой же отточенной или заметной, как PETSc; Trilinos выглядит как аналог Sandia PETSc. PETSc может вызвать некоторых из решателей Трилино. Двоичные файлы для Trilinos доступны для Linux.
Blitz - это объектно-ориентированная библиотека C ++, в которой есть двоичные файлы Linux. Похоже, что он не поддерживается активно (2012-06-29: новая версия только что появилась вчера!), Хотя список рассылки активен, поэтому есть сообщество, которое использует его. Похоже, что она не имеет большого значения для числовой линейной алгебры, кроме BLAS, и выглядит как библиотека с плотной матрицей. Он использует шаблоны.
Boost :: uBLAS является объектно-ориентированной библиотекой C ++ и является частью проекта Boost. Он поддерживает шаблонную и плотную числовую линейную алгебру. Я слышал, это не особенно быстро.
Шаблон Численный Инструментарий представляет собой С ++ объектно-ориентированная библиотека , разработанная NIST. Его автор, Roldan Pozo, кажется, время от времени вносит исправления, но, похоже, он больше не находится в стадии активной разработки (последнее обновление было в 2010 году). Он фокусируется на плотной линейной алгебре и предоставляет интерфейсы для некоторых базовых матричных разложений и решатель собственных значений.
Elemental , разработанный Джеком Полсоном, представляет собой программный пакет плотной линейной алгебры с распределенной памятью (параллельный), написанный в стиле, похожем на FLAME . Список возможностей и фона проекта см. В его документации . Сам FLAME имеет связанную библиотеку для плотной линейной алгебры с последовательной и разделяемой памятью, называемую libflame , которая, кажется, написана на объектно-ориентированном языке C. Libflame очень похожа на LAPACK, но с улучшенной нотацией, лежащей в основе алгоритмов для создания быстрой числовой разработки библиотеки линейной алгебры больше науки и меньше черного искусства.
Есть другие библиотеки, которые можно добавить в список; если мы считаем пакеты разреженной линейной алгебры «матричными библиотеками», лучшим из известных мне бесплатных приложений на C является SuiteSparse , который запрограммирован в объектно-ориентированном стиле. Я использовал SuiteSparse и нашел его довольно легко подобрать; это зависит от BLAS и LAPACK для некоторых алгоритмов, которые разлагают разреженные задачи на множество небольших, плотных подзадач линейной алгебры. Тим Дэвис, ведущий автор пакета, невероятно услужливый и отличный универсальный парень.
В Подпрограммах библиотека Харуэлля известна своей редкой линейных рутины алгебры, и являются бесплатными для академических пользователей, хотя вы должны пройти через этот процесс заполнения формы и получение электронной почты для каждого файла , который вы хотите загрузить. Поскольку подпрограммы часто имеют зависимости, использование одного решателя может потребовать загрузки пяти или шести файлов, и процесс может быть несколько утомительным, особенно потому, что утверждение формы не происходит мгновенно.
Существуют и другие разреженные решения для линейной алгебры, но, насколько я могу судить, MUMPS и другие пакеты ориентированы в основном на решение линейных систем, и решение линейных систем является наименьшей из моих проблем на данный момент. (Возможно, позже мне понадобятся эти функции, и они могут быть полезны для других.)