eigen
Высокопроизводительная библиотека шаблонов C++ для линейной алгебры, реализующая операции с матрицами, векторами, числовыми решателями и связанными алгоритмами. Библиотека использует метапрограммирование на этапе компиляции для генерации оптимизированного кода, обеспечивая производительность, сравнимую с низкоуровневыми библиотеками (BLAS/LAPACK), при сохранении удобного объектно-ориентированного интерфейса. Eigen поддерживает как статические (фиксированного размера), так и динамические (изменяемого размера) структуры данных с автоматической векторизацией вычислений через SIMD-инструкции.
Особенности
- поддержка матричных и векторных операций с фиксированными и динамическими размерами;
- автоматическая векторизация вычислений с использованием SIMD-инструкций (SSE, AVX, NEON);
- численные алгоритмы: линейные решатели, разложения матриц, собственные значения;
- модульная архитектура с минимальными зависимостями;
- кроссплатформенность и поддержка стандартов C++11 и выше.
Основные компоненты
Библиотека предоставляет комплексный API для линейной алгебры, организованный в модули для различных типов операций (подробнее с документацией можно ознакомиться здесь):
Модуль базовых операций (Core)
Фундаментальный модуль, определяющий типы данных и основные операции линейной алгебры. Включает шаблонные классы для матриц (Matrix), векторов (Vector), массивов (Array) и базовые арифметические операции. Модуль обеспечивает управление памятью, доступ к элементам и элементарные операции.
Eigen::Matrix— шаблонный класс для представления матриц с фиксированными или динамическими размерами;Eigen::Vector— специализация Matrix для векторов (столбцов или строк);Eigen::Array— класс для поэлементных операций (в отличие от матричных операций);Eigen::Map— класс для отображения существующих массивов памяти в объекты Eigen без копирования.
Модуль геометрии (Geometry)
Модуль для работы с геометрическими преобразованиями и кинематикой. Предоставляет классы для представления и манипуляции поворотами, трансляциями, масштабированием в 2D и 3D пространстве. Включает преобразования между различными представлениями (углы Эйлера, кватернионы, матрицы поворота).
Eigen::Quaternion— класс для представления и операций с кватернионами;Eigen::AngleAxis— представление поворота как оси и угла;Eigen::Transform— аффинные и проективные преобразования в 2D/3D;Eigen::Translation— класс для представления трансляций.
Модуль линейных решателей (Linear Solvers)
Модуль, предоставляющий алгоритмы решения систем линейных уравнений и разложения матриц. Включает прямые и итеративные методы для плотных и разреженных матриц с поддержкой различных численных методов и оптимизаций для симметричных и положительно определенных матриц.
Eigen::LLT— разложение Холецкого для симметричных положительно определенных матриц;Eigen::LDLT— разложение LDLT для симметричных матриц;Eigen::FullPivLU— полное LU-разложение с выбором ведущего элемента;Eigen::HouseholderQR,Eigen::ColPivHouseholderQR— QR-разложения;
Модуль разреженных матриц (Sparse)
Модуль для работы с разреженными матрицами и соответствующими алгоритмами. Предоставляет эффективные структуры хранения (CSR, CSC), итераторы по ненулевым элементам и оптимизированные операции. Включает итерационные решатели для систем с разреженными матрицами.
Eigen::SparseMatrix— шаблонный класс для хранения разреженных матриц;Eigen::SparseVector— класс для разреженных векторов;Eigen::ConjugateGradient,Eigen::BiCGSTAB— итерационные решатели;Eigen::SparseLU,Eigen::SparseQR— прямые методы для разреженных систем.
Модуль собственных значений (Eigenvalues)
Модуль для вычисления собственных значений и собственных векторов матриц. Реализует алгоритмы для симметричных и несимметричных матриц, включая методы для задач большой размерности и специализированные алгоритмы для эрмитовых матриц.
Eigen::SelfAdjointEigenSolver— решатель для самосопряженных (эрмитовых) матриц;Eigen::ComplexEigenSolver— решатель для комплексных матриц;Eigen::GeneralizedSelfAdjointEigenSolver— обобщенная задача на собственные значения.