Я ищу библиотеку линейных алгебр Haskell, которая имеет следующие функции:
- Матричное умножение
- Добавление матрицы
- Трансформация матрицы
- Расчет ранга
- Матричная инверсия - это плюс
и обладает следующими свойствами:
- произвольные элементы (скалярные) типы (в частности, типы элементов, которые не являются экземплярами
Storable
). Мои элементы являются экземпляромNum
, кроме того, можно вычислить мультипликативный обратный. Элементы математически образуют конечное поле (𝔽 2 256). Этого должно быть достаточно для реализации упомянутых выше функций. - произвольные размеры матрицы (мне, вероятно, понадобится что-то вроде 100x100, но размеры матрицы будут зависеть от ввода пользователя, поэтому он не должен ограничиваться чем-либо другим, кроме памяти или доступной вычислительной мощности).
- как можно быстрее, но я знаю, что библиотека для произвольных элементов, вероятно, не будет работать подобно библиотеке C/Fortran, которая выполняет эту работу (сопряжена через FFI) из-за косвенности произвольного (не
Int
,Double
или аналогичных). По крайней мере, один указатель получает разыменованный элемент при касании элемента - (написанный в Haskell, для меня это не является реальным требованием, но поскольку мои элементы не являются экземплярами
Storable
, библиотека должна быть записана в Haskell)
Я уже очень старался и оценивал все, что выглядело многообещающе (большинство библиотек в Hackage прямо заявляют, что они не будут работать для меня). В частности, я написал тестовый код, используя:
Я просмотрел код и документацию по многим другим библиотекам, но ничто не соответствует моим потребностям: - (.
Update
Поскольку, похоже, ничего нет, я начал проект на GitHub, целью которого является создание такой библиотеки. Текущее состояние очень минималистично, не оптимизировано для скорости вообще, и только самые основные функции имеют тесты и поэтому должны работать. Но если вы заинтересованы в использовании или помощи в разработке: свяжитесь со мной (вы найдете мой почтовый адрес на моем веб-сайте) или отправьте запросы на тяну.