# Mathematical Libraries¶

Mathematical libraries used in development and those usages with CMake.

- boost Math Toolkit
- Netlib Repository at UTK and ORNL
- CodeCogs: Open Source Scientific Library (C/C++, .NET, Excel)
- GSL (GNU Scientific Library): a numerical library for C and C++ programmers
- GSL Shell offers an interactive command-line interface that gives access to GSL collection of mathematical functions

- C++11 Fixed Point Arithmetic Library

## Basic Linear Algebra¶

### BLAS¶

The BLAS (Basic Linear Algebra Subprograms) are routines that provide standard building blocks for **performing basic vector and matrix operations**. The Level 1 BLAS perform scalar, vector and vector-vector operations, the Level 2 BLAS perform matrix-vector operations, and the Level 3 BLAS perform matrix-matrix operations. Because the BLAS are efficient, portable, and widely available, they are commonly used in the development of high quality linear algebra software, LAPACK for example.

### LAPACK¶

LAPACK is written in Fortran 90 and provides routines for **solving systems of simultaneous linear equations, least-squares solutions of linear systems of equations, eigenvalue problems, and singular value problems**.

```
find_package(LAPACK REQUIRED)
if(LAPACK_FOUND)
message(STATUS "LAPACK Libraries: ")
foreach (lib ${LAPACK_LIBRARIES})
message(STATUS " " ${lib})
endforeach()
link_libraries( ${LAPACK_LIBRARIES} )
endif()
```

### ATLAS¶

The ATLAS (Automatically Tuned Linear Algebra Software) project is an ongoing research effort focusing on applying empirical techniques in order to provide portable performance. At present, it provides C and Fortran77 interfaces to a portably efficient BLAS implementation, as well as a few routines from LAPACK.

### OpenBLAS¶

OpenBLAS is **an optimized BLAS library** based on GotoBLAS2 1.13 BSD version.

### SuiteSparse¶

SuiteSparse: A Suite of Sparse Matrix Software.

### Eigen¶

Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.

```
find_package(Eigen3 REQUIRED)
if(EIGEN3_FOUND)
include_directories( ${EIGEN3_INCLUDE_DIR} )
endif()
```

### Matrix Template Library (MTL2/MTL4)¶

The Matrix Template Library 4 (MTL4) is a development library for scientific computing that combines high productivity with high performance in the execution.

### Blitz++¶

Blitz++ is a C++ class library for scientific computing which provides performance on par with Fortran 77/90. It uses template techniques to achieve high performance. Blitz++ provides dense arrays and vectors, random number generators, and small vectors (useful for representing multicomponent or vector fields).

### CLBlast¶

CLBlast is a modern, lightweight, performant and tunable OpenCL BLAS library written in C++11.

### GMP¶

GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers.

## Lie theory¶

### TooN¶

TooN: Tom's Object-oriented numerics library.

The TooN library is a set of C++ header files which provide basic linear algebra facilities.

### Sophus¶

C++ implementation of Lie Groups using Eigen commonly used for 2d and 3d geometric problems (i.e. for Computer Vision or Robotics applications).

```
find_package( Sophus REQUIRED )
if(Sophus_FOUND)
include_directories( ${Sophus_INCLUDE_DIRS} )
link_libraries( ${Sophus_LIBRARIES} )
endif()
```

### manif¶

manif is a header-only c++11 Lie theory library for state-estimation targeted at robotics applications

## DFT¶

### FFTW¶

FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST).

## Optimization¶

### Ceres Solver¶

Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems. It can be used to solve Non-linear Least Squares problems with bounds constraints and general unconstrained optimization problems.

```
find_package( Ceres REQUIRED )
if(Ceres_FOUND)
include_directories( ${CERES_INCLUDE_DIRS} )
link_libraries( ${CERES_LIBRARIES} )
endif()
```

### G2O¶

g2o: A General Framework for Graph Optimization

```
find_package( G2O REQUIRED )
if(G2O_FOUND)
include_directories( ${G2O_INCLUDE_DIRS} )
link_libraries( g2o_core g2o_stuff g2o_types_sba )
endif()
```

### ensmallen¶

ensmallen: flexible C++ library for efficient mathematical optimization

## Search¶

### ANN¶

ANN: A Library for Approximate Nearest Neighbor Searching

### FLANN¶

FLANN is a library for performing fast approximate nearest neighbor searches in high dimensional spaces.

### Annoy¶

Annoy (Approximate Nearest Neighbors Oh Yeah) is a C++ library with Python bindings to search for points in space that are close to a given query point.