Эффективная матричная библиотека Java
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Оригинальный автор(ы) | Питер Абелес |
---|---|
Стабильная версия | 0.41.1
/ 4 декабря 2022 г |
Репозиторий | |
Операционная система | Кросс-платформенный |
Тип | Библиотека |
Лицензия | Лицензия Апач |
Веб-сайт | эймл |
Efficient Java Matrix Library (EJML) — это библиотека линейной алгебры для управления вещественными/сложными/плотными/разреженными матрицами. Цели его проектирования: 1) быть максимально эффективным с точки зрения вычислений и памяти как для маленьких, так и для больших матриц, и 2) быть доступным как для новичков, так и для экспертов. Эти цели достигаются путем динамического выбора лучших алгоритмов для использования во время выполнения, чистого API и нескольких интерфейсов. EJML бесплатен, написан на 100% Java и выпущен под лицензией Apache v2.0.
EJML имеет три различных способа взаимодействия с ним: 1) процедурный, 2) SimpleMatrix и 3) уравнения. Процедурный стиль предоставляет все возможности EJML и практически полный контроль над созданием матриц, скоростью и конкретными алгоритмами. Стиль SimpleMatrix предоставляет упрощенное подмножество основных возможностей в простом в использовании объектно-ориентированном API в стиле потока, вдохновленном JAMA . Стиль Equations предоставляет символьный интерфейс, аналогичный по духу Matlab и другим CAS, который обеспечивает компактный способ написания уравнений. [1]
Возможности
[ редактировать ]EJML предоставляет следующие возможности для плотных матриц.
- Основные операторы (сложение, умножение,...)
- Матричные манипуляции (извлечение, вставка, объединение...)
- Линейные решатели (линейные, наименьшие квадраты, инкрементные,...)
- Разложения (LU, QR, Холецкого, SVD, собственное значение, ...)
- Характеристики матрицы (ранг, симметричность, определенность, ...)
- Случайные матрицы (ковариантные, ортогональные, симметричные,...)
- Различные внутренние форматы (строки, блоки)
- Модульное тестирование
Примеры использования
[ редактировать ]Стиль уравнения
[ редактировать ]Вычисление усиления Калмана :
eq.process("K = P*H'*inv( H*P*H' + R )");
Процедурный стиль
[ редактировать ]Вычисление усиления Калмана:
mult(H, P, c);
multTransB(c, H, S);
addEquals(S, R);
if (!invert(S, S_inv))
throw new RuntimeException("Invert failed");
multTransA(H, S_inv, d);
mult(P, d, K);
Стиль SimpleMatrix
[ редактировать ]Пример разложения по сингулярным значениям (SVD):
SimpleSVD s = matA.svd();
SimpleMatrix U = s.getU();
SimpleMatrix W = s.getW();
SimpleMatrix V = s.getV();
Пример умножения матрицы:
SimpleMatrix result = matA.mult(matB);
РазложениеФабрика
[ редактировать ]Использование DecompositionFactory для вычисления разложения по сингулярным значениям с помощью плотной двухстрочной основной матрицы (DDRM): [2]
SingularValueDecomposition_F64<DenseMatrix64F> svd =
DecompositionFactory_DDRM.svd(true, true, true);
if (!DecompositionFactory.decomposeSafe(svd, matA))
throw new DetectedException("Decomposition failed.");
DenseMatrix64F U = svd.getU(null, false);
DenseMatrix64F S = svd.getW(null);
DenseMatrix64F V = svd.getV(null, false);
Пример умножения матрицы:
CommonOps_DDRM.mult(matA, matB, result);
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Страница проекта EJML» . ЭЖМЛ . Питер Абелес . Проверено 21 января 2019 г.
- ^ «Матричное разложение — эффективная матричная библиотека Java» . ejml.org . Проверено 24 апреля 2021 г.