
Pet-project: мини-библиотека по линейной алгебре
D137 12 минут назад Pet-project: мини-библиотека по линейной алгебре 6 мин 239 C++ * Алгоритмы * Математика * Из песочницы ВведениеОднажды меня попросили рассказать о своем опыте разработки математических алгоритмов....
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. D137 12 минут назад Pet-project: мини-библиотека по линейной алгебре 6 мин 239 C++ * Алгоритмы * Математика * Из песочницы ВведениеОднажды меня попросили рассказать о своем опыте разработки математических алгоритмов. Так как коммерческий опыт у меня был преимущественно в веб-разработке, то рассказать я мог только об университетском опыте, либо реализовать собственный pet-проект. Я выбрал тему линейной алгебры.
Существовало два варианта реализации проекта: с интерфейсом на Qt либо в виде решения, которое можно использовать в backend-разработке. Я выбрал второй вариант и реализовал небольшую библиотеку. В ходе разработки мне пришлось ответить на следующие вопросы:- Как в принципе реализуются библиотеки и как сделать её подключение и использование удобной для пользователя?
Технические детали
- Сколько прироста производительности даёт переход от 2D векторов к плоским матрицам? - Какие возможности оптимизации есть? Какие подходят для данного проекта?
- Разобраться в алгоритмах разложения и алгоритмах, реализуемых на основе этих декомпозиций. В данном случае на основе LU. Проект не является промышленной библиотекой и не ставит своей целью создание аналога Eigen или Armadillo.
АрхитектураНа данный момент проект состоит из двух основных компонентов:- Хранение (MatrixBase. hpp) - Декомпозиция(LU. hpp) - разложение PA = LU - решение систем Ax = b - вычисление определителя - обращение матрицы LU-декомпозиция.
Отраслевые последствия
Реализована LU-декомпозиция с частичным выбором главного элемента (partial pivoting). В ходе разложения вычисляются верхне-треугольная матрица U и нижне-треугольная матрица L. Они хранятся совместно в одной матрице (in-place).
Проверка корректности происходит в тестах, где проверяется равенство PA=LU. В классе есть ограничение это работа с типами с плавающей запятой, поскольку при вычислении элементов матриц U и L возникают операции деления, как правило в следствии деления будут дробные значения. Использование целочисленных типов приводит к потере дробной части из-за целочисленного деления и, как следствие, к искажению промежуточных результатов и ошибкам вычислений.
Если кратко:Находим опорный элемент. Самый большой элемент в текущем столбце k. Метод:pivotingМеняем опорную строку с текущей строкойДалее заполняем треугольники L(нижняя часть матрицы) и U(верхняя часть матрицы), метод: eliminationТам же вычисляется знак определителя signP Определитель вычисляется как произведение диагональных элементов матрицы U с учётом знака перестановок где signP принимает значения 1 или -1 в зависимости от чётности числа перестановок строк.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





