Я зібрав наступне з онлайн-досліджень:
Я використовував 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. У ньому також є компоненти, які забезпечують функціональність лінійного розв'язувача та власного рішення. Документація не виглядає настільки відшліфованою чи видатною, як PETSc; Трилінос здається аналогом Sandia PETSc. PETSc може викликати деякі вирішувачі Trilinos. Бінарні файли для Trilinos доступні для Linux.
Blitz - об'єктно-орієнтована бібліотека C ++, яка має бінарні файли Linux. Схоже, він не підтримується активно (2012-06-29: нова версія з'явилася вчора!), Хоча список розсилки активний, тому існує деяка спільнота, яка використовує його. Схоже, це не робить багато на шляху числової лінійної алгебри поза BLAS, і схоже на щільну бібліотеку матриць. Він використовує шаблони.
Boost :: uBLAS - об'єктно-орієнтована бібліотека C ++ та частина проекту Boost. Він підтримує шаблонні та щільні числові лінійні алгебри. Я чув, що це не особливо швидко.
Numerical Toolkit " Шаблон" - це об'єктово-орієнтована бібліотека C ++, розроблена NIST. Його автор, Ролдан Позо, здається, періодично вносить виправлення, але, здається, вже не знаходиться в активному розвитку (останнє оновлення було 2010). Він фокусується на щільній лінійній алгебрі та забезпечує інтерфейси для деяких основних матричних розкладів та власного значення.
Elemental , розроблений Джеком Поульсоном, - це програмний пакет з розподіленою пам'яттю (паралельний) щільної лінійної алгебри, написаний у стилі, подібному до FLAME . Перелік особливостей та відомостей про проект див. У його документації . Сама FLAME має пов'язану бібліотеку для послідовної щільної лінійної алгебри, що називається libflame , яка, як видається, написана в об'єктно-орієнтованій C. Libflame дуже схожий на LAPACK, але з кращими позначеннями, що лежать в основі алгоритмів, що дозволяють розвивати швидку чисельну цифру Бібліотеки лінійної алгебри більше науки, а менше чорного мистецтва.
Є й інші бібліотеки, які можна додати до списку; якщо ми рахуємо розріджені пакети лінійних алгебр як "матричні бібліотеки", найкращий безкоштовний, про який я знаю в C, це SuiteSparse , який запрограмований у об'єктно-орієнтованому стилі. Я використав SuiteSparse і мені стало досить легко підібрати; це залежить від BLAS та LAPACK для деяких алгоритмів, які розкладають розрізнені задачі на безліч малих щільних лінійних підпроблем алгебри. Провідний автор пакету Тім Девіс надзвичайно корисний і чудовий хлопець.
У підпрограму бібліотека Харуелле відома своєю рідкісною лінійних рутини алгебри, і є безкоштовними для академічних користувачів, хоча ви повинні пройти через цей процес заповнення форми та отримання електронної пошти для кожного файлу , який ви хочете завантажити. Оскільки підпрограми часто мають залежність, використання одного розв'язувача може зажадати завантаження п'яти-шести файлів, і процес може отримати дещо виснажливий характер, тим більше, що затвердження форми не є миттєвим.
Існують також інші розріджені лінійні алгебри, але, наскільки я можу сказати, MUMPS та інші пакети орієнтовані здебільшого на рішення лінійних систем, і вирішення лінійних систем є найменшою моєю проблемою зараз. (Можливо, пізніше мені знадобиться ця функціональність, і це може бути корисно для інших.)