Armadillo (библиотека C ++) - Armadillo (C++ library)

Библиотека Armadillo C ++
Стабильный выпуск
10.5.3 / 1 июля 2021 г . ; 3 месяца назад ( 2021-07-01 )
Написано в C ++
Операционная система Кроссплатформенность
Доступно в английский
Тип Библиотека программного обеспечения
Лицензия Apache 2.0открытым исходным кодом )
Веб-сайт arma .sourceforge .net

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;
}

Смотрите также

использованная литература

внешние ссылки