Armadillo (библиотека C ++) - Armadillo (C++ library)
Стабильный выпуск | 10.5.3 / 1 июля 2021 г .
|
---|---|
Написано в | C ++ |
Операционная система | Кроссплатформенность |
Доступно в | английский |
Тип | Библиотека программного обеспечения |
Лицензия | Apache 2.0 (с открытым исходным кодом ) |
Веб-сайт | arma |
Armadillo - это программная библиотека линейной алгебры для языка программирования C ++ . Он нацелен на обеспечение эффективных и оптимизированных базовых вычислений, в то же время имея простой и легкий в использовании интерфейс. Предполагаемые целевые пользователи - ученые и инженеры.
Он поддерживает целые числа, числа с плавающей запятой ( одинарной и двойной точности), комплексные числа , а также подмножество тригонометрических и статистических функций. Поддерживаются плотные и разреженные матрицы . Различные матричные декомпозиции предоставляются за счет дополнительной интеграции с пакетом линейной алгебры ( LAPACK ), автоматически настраиваемым программным обеспечением линейной алгебры (ATLAS) и ARPACK . Также можно использовать высокопроизводительные замещающие библиотеки BLAS / LAPACK, такие как OpenBLAS и Intel MKL .
В библиотеке используется подход отложенной оценки (во время компиляции ) для объединения нескольких операций в одну и уменьшения (или устранения) необходимости во временных библиотеках . Там, где это применимо, порядок операций оптимизирован. Отсроченная оценка и оптимизация достигаются за счет метапрограммирования шаблонов .
Armadillo связан с библиотекой подпрограмм Boost Basic Linear Algebra Subprograms (uBLAS), которая также использует метапрограммирование шаблонов . Однако Armadillo основывается на библиотеках ATLAS и LAPACK , тем самым обеспечивая машинно-зависимые оптимизации и функции, отсутствующие в uBLAS.
Это программное обеспечение с открытым исходным кодом, распространяемое по разрешающей лицензии Apache , что делает его применимым для разработки как программного обеспечения с открытым исходным кодом, так и проприетарного программного обеспечения. Проект поддерживается исследовательским центром NICTA в Австралии.
Интерфейс на языке Python доступен через PyArmadillo пакет, который облегчает создание прототипов алгоритмов в Python с последующим относительно простого преобразования в C ++.
Пример на C ++ 11
Вот тривиальный пример, демонстрирующий функциональность Armadillo:
// Compile with:
// $ g++ -std=c++11 main.cpp -o file_name -O2 -larmadillo
#include <iostream>
#include <armadillo>
#include <cmath>
int main()
{
// ^
// Position of a particle // |
arma::vec Pos = {{0}, // | (0,1)
{1}}; // +---x-->
// Rotation matrix
double phi = -3.1416/2;
arma::mat RotM = {{+cos(phi), -sin(phi)},
{+sin(phi), +cos(phi)}};
Pos.print("Current position of the particle:");
std::cout << "Rotating the point " << phi*180/3.1416 << " deg" << std::endl;
Pos = RotM*Pos;
Pos.print("New position of the particle:"); // ^
// x (1,0)
// |
// +------>
return 0;
}
Пример на C ++ 98
Вот еще один тривиальный пример на C ++ 98:
#include <iostream>
#include <armadillo>
int main()
{
arma::vec b;
b << 2.0 << 5.0 << 2.0;
// arma::endr represents the end of a row in a matrix
arma::mat A;
A << 1.0 << 2.0 << arma::endr
<< 2.0 << 3.0 << arma::endr
<< 1.0 << 3.0 << arma::endr;
std::cout << "Least squares solution:\n";
std::cout << arma::solve(A,b) << '\n';
return 0;
}
Смотрите также
- mlpack
- Список программного обеспечения для численного анализа
- Список числовых библиотек
- Числовая линейная алгебра
- Научные вычисления