Do tej pory zebrałem następujące informacje z badań online:
Użyłem trochę Armadillo i uznałem, że interfejs jest wystarczająco intuicyjny i łatwo było znaleźć pakiety binarne dla Ubuntu (i zakładam, że inne dystrybucje Linuksa). Nie skompilowałem go ze źródła, ale mam nadzieję, że nie będzie to zbyt trudne. Spełnia większość moich kryteriów projektowych i używa gęstej algebry liniowej. Może wywoływać procedury LAPACK lub MKL. Zasadniczo nie ma potrzeby kompilowania Armadillo, jest to biblioteka oparta wyłącznie na szablonach: wystarczy dołączyć nagłówek i link do BLAS / LAPACK lub MKL itp.
Słyszałem dobre rzeczy o Eigen , ale go nie użyłem. To twierdzi, że jest szybki , wykorzystuje templating i obsługuje gęstą algebry liniowej. Nie ma LAPACK ani BLAS jako zależności, ale wydaje się, że jest w stanie zrobić wszystko, co LAPACK może zrobić (plus niektóre rzeczy, których LAPACK nie potrafi). Wiele projektów korzysta z Eigen, co jest obiecujące. Ma pakiet binarny dla Ubuntu, ale jako biblioteka zawierająca tylko nagłówki jest trywialna w użyciu również w innych miejscach.
Matrix Template Library wersja 4 również wygląda obiecująco i wykorzystuje templating. Obsługuje zarówno gęstą, jak i rzadką algebrę liniową i może wywoływać UMFPACK jako rzadki solver. Funkcje są nieco niejasne na ich stronie internetowej. Ma pakiet binarny dla Ubuntu, do pobrania z ich strony internetowej.
PETSc , napisany przez zespół z Argonne National Laboratory, ma dostęp do rzadkich i gęstych solverów liniowych, więc przypuszczam, że może on działać jako biblioteka macierzowa. Jest napisany w C, ale myślę, że ma powiązania C ++, a nawet jeśli nie, wywołanie C z C ++ nie stanowi problemu. Dokumentacja jest niezwykle dokładna. Pakiet jest nieco przesadny w stosunku do tego, co chcę teraz zrobić (mnożenie macierzy i indeksowanie w celu skonfigurowania programów liniowych o mieszanych liczbach całkowitych), ale może być przydatny jako format macierzy dla mnie w przyszłości lub dla innych osób o różnych potrzebach niż ja.
Trilinos , napisane przez zespół z Sandia National Laboratory, zapewnia zorientowane obiektowo interfejsy C ++ dla gęstych i rzadkich matryc dzięki komponentowi Epetra, a także szablony interfejsów dla gęstych i rzadkich matryc dzięki komponentowi Tpetra. Zawiera również komponenty zapewniające działanie solvera liniowego i eigensolvera. Dokumentacja nie wydaje się tak dopracowana ani widoczna jak PETSc; Trilinos wydaje się być analogiem Sandii z PETSc. PETSc może wywoływać niektóre solvery Trilinos. Pliki binarne dla Trilinos są dostępne dla systemu Linux.
Blitz jest zorientowaną obiektowo biblioteką C ++ z binariami Linuksa. Wydaje się, że nie jest aktywnie utrzymywany (2012-06-29: wczoraj pojawiła się nowa wersja!), Chociaż lista mailingowa jest aktywna, więc istnieje społeczność, która z niej korzysta. Wydaje się, że niewiele robi na drodze numerycznej algebry liniowej poza BLAS i wygląda jak biblioteka gęstej macierzy. Korzysta z szablonów.
Boost :: uBLAS jest biblioteką obiektową C ++ i częścią projektu Boost. Obsługuje szablony i gęstą numeryczną algebrę liniową. Słyszałem, że to nie jest szczególnie szybkie.
Template Numerical Toolkit jest C ++ obiektowego biblioteka opracowany przez NIST. Jego autor, Roldan Pozo, wydaje się od czasu do czasu dodawać łaty, ale wydaje się, że nie jest już aktywnie rozwijany (ostatnia aktualizacja to 2010). Koncentruje się na gęstej algebrze liniowej i zapewnia interfejsy dla niektórych podstawowych rozkładów macierzy i solvera wartości własnych.
Elemental , opracowany przez Jacka Poulsona, to pakiet oprogramowania z gęstą pamięcią (równoległą) o gęstej algebrze liniowej napisany w stylu podobnym do FLAME . Aby zapoznać się z listą funkcji i tła projektu, zobacz jego dokumentację . Sam FLAME ma powiązaną bibliotekę dla gęstej algebry liniowej pamięci sekwencyjnej i współużytkowanej, zwaną libflame , która wydaje się być napisana w obiektowo zorientowanej C. Libflame wygląda bardzo podobnie do LAPACK, ale z lepszą notacją leżącą u podstaw algorytmów w celu szybkiego opracowania numerycznego biblioteki algebry liniowej to raczej nauka, a mniej czarna sztuka.
Istnieją inne biblioteki, które można dodać do listy; jeśli liczymy rzadkie pakiety algebry liniowej jako „biblioteki macierzy”, najlepszym wolnym, jaki znam w C, jest SuiteSparse , który jest programowany w stylu obiektowym. Korzystałem z SuiteSparse i odkryłem, że dość łatwo go odebrać; zależy od BLAS i LAPACK dla niektórych algorytmów, które rozkładają rzadkie problemy na wiele małych, gęstych podproblemów algebry liniowej. Główny autor pakietu, Tim Davis, jest niezwykle pomocny i jest wszechstronnym facetem.
The Harwell Podprogram Biblioteki słyną z nielicznych procedur algebry liniowej i są bezpłatne dla użytkowników akademickich, choć trzeba przejść przez ten proces wypełniania formularza i odbieranie wiadomości e-mail dla każdego pliku, który chcesz pobrać. Ponieważ podprogramy często mają zależności, użycie jednego solwera może wymagać pobrania pięciu lub sześciu plików, a proces może być nieco żmudny, zwłaszcza, że zatwierdzenie formularza nie jest natychmiastowe.
Istnieją również inne rzadkie solwery algebry liniowej, ale o ile wiem, MUMPS i inne pakiety koncentrują się głównie na rozwiązaniu układów liniowych, a rozwiązywanie układów liniowych jest obecnie najmniejsze z moich obaw. (Może później będę potrzebował tej funkcji i może być przydatny dla innych).