Операционная система | Linux , Unix , MacOS , Windows |
---|---|
Доступно в | С++ |
Тип | Библиотека научного программного обеспечения |
Лицензия | Лицензия на программное обеспечение Boost |
Веб-сайт | http://simunova.com/en/mtl4/ |
Библиотека шаблонов матриц (MTL) — это библиотека линейной алгебры для программ на языке C++ .
MTL использует шаблонное программирование , что значительно сокращает длину кода. Все матрицы и векторы доступны во всех классических числовых форматах: float
, double
, complex<float>
или complex<double>
.
Более того, обобщенное программирование позволяет использовать произвольные типы, пока они предоставляют необходимые операции. Например, можно использовать произвольные целочисленные форматы (например, unsigned short
), типы для интервальной арифметики (например, boost::interval) из библиотек Boost C++ , кватернионы (например, boost::quaternion), типы более высокой точности (например, GNU Multi-Precision Library ) и соответствующие пользовательские типы.
MTL поддерживает несколько реализаций плотных матриц и разреженных матриц . MTL2 был разработан Джереми Сиком и Эндрю Ламсдейном. [1]
Последняя версия, MTL4, разработана Питером Готтшлингом и Эндрю Ламсдейном. Она содержит большую часть функциональности MTL2 и добавляет новые методы оптимизации, такие как мета-настройка, например, развертывание цикла динамических контейнеров может быть указано в вызове функции. Масштабируемость производительности, не зависящая от платформы, достигается с помощью рекурсивных структур данных и алгоритмов. [2]
Общие приложения могут быть написаны в естественной нотации, например v += A*q - w;
, в то время как библиотека отправляет соответствующие алгоритмы: матрично-векторные произведения против матричных произведений против векторных скалярных произведений и т. д. Цель состоит в том, чтобы инкапсулировать проблемы производительности внутри библиотеки и предоставить ученым интуитивно понятный интерфейс. MTL4 используется в различных пакетах конечных элементов и конечных объемов , например, в проекте FEniCS . [3]