# eigen

Высокопроизводительная библиотека шаблонов C++ для линейной алгебры, реализующая операции с матрицами, векторами, числовыми решателями и связанными алгоритмами. Библиотека использует метапрограммирование на этапе компиляции для генерации оптимизированного кода, обеспечивая производительность, сравнимую с низкоуровневыми библиотеками (BLAS/LAPACK), при сохранении удобного объектно-ориентированного интерфейса. Eigen поддерживает как статические (фиксированного размера), так и динамические (изменяемого размера) структуры данных с автоматической векторизацией вычислений через SIMD-инструкции.

## Особенности

- поддержка матричных и векторных операций с фиксированными и динамическими размерами;
- автоматическая векторизация вычислений с использованием SIMD-инструкций (SSE, AVX, NEON);
- численные алгоритмы: линейные решатели, разложения матриц, собственные значения;
- модульная архитектура с минимальными зависимостями;
- кроссплатформенность и поддержка стандартов C++11 и выше.

## Основные компоненты

Библиотека предоставляет комплексный API для линейной алгебры, организованный в модули для различных типов операций (подробнее с документацией можно ознакомиться [здесь](https://libeigen.gitlab.io/documentation/)):

### Модуль базовых операций (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` — обобщенная задача на собственные значения.
