Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.

RcdMathLib Documentation {#mainpage}

\author Zakaria Kasmi

RcdMathLib in a nutshell {#RcdMathLib-in-a-nutshell}

RcdMathLib is an open-source library for numerical linear and non-linear algebra designed to match the requirements of resource-limited or embedded devices. RcdMathLib supports solving linear and non-linear equation systems. Furthermore, it provides general-purpose implemented methods that facilitate solving problems of regression smoothing and curve fitting. It also allows for calculating as well as optimizing a position on a mobile device.

Download and use RcdMathLib {#download-use-RcdMathLib}

The simplest way to use the RcdMathLib for resource-limited devices is to download the Elipse project (TODO). The following Eclipse project enables also the RcdMathLib for full-fledged platforms (TODO).

The quickest start {#the-quickest-start}

You can run RcdMathLib on most resource-limited such as the STM32 Discovery board as well as on a PC. Try it right now in your terminal window:

git clone git://github.com/RIOT-OS/RIOT.git # assumption: git is pre-installed                                                                    
cd RcdMathLib/examples/linear_algebra/basic_operation/
make all

The example above shows how to use the basic operations of the RcdMathLib such as the vector or the matrix operations.

Structure {#structure}

This section walks you through RcdMathLib's structure to easily find your way around in RcdMathLib's code base.

Software Architecture

RcdMathLib's source code is composed into three groups:

  • Linear algebra
  • Non-linear algebra
  • Localization

In addition RcdMathLib includes various examples to familiarize the user with the software as well as an API to facilitate the use and the further development of the library.

The structural groups are projected onto the directory structure of RcdMathLib, where each of these groups resides in one or two directories in the main RcdMathLib directory.

The following list gives a more detailed description of each of RcdMathLib's top-level directories:

Linear Algebra

This directory contains functions that are specific to vector and matrix operations, and other algebraic operations. It provides functions to perform basic matrix operations such as matrix addition, multiplication, or transposition. It also provides algorithms for complex operations like matrix decomposition algorithms, algorithms to calculate the pseudo-inverse of a matrix, or methods to solve systems of linear equations. The linear algebra module is divided in the following sub-modules:

  • Basic operations sub-module.
  • Matrix decompositions sub-module.
  • Pseudo-Inverse sub-module.
  • Solve linear equations sub-module.
  • Utilities sub-module.

See @ref linear_algebra module for further information and API documentations.

Non-Linear Algebra

The non-linear algebra module contains functions to solve multi-variant nonlinear equations as wells algorithms solving problems of regression smoothing and curve fitting. This module also enables enables the optimization of an approximate solution by using Non-linear Least Squares (NLS) methods such as modified Gauss--Newton (GN) or the Levenberg--Marquardt (LVM) algorithms. The non-linear algebra module is divided in the two following sub-modules:

  • Solve non-linear equations sub-module.
  • Optimization sub-module.

See here @ref non_linear_algebra module for further information.

Localization

The localization module contains functions to compute a position of a mobile device using distance measurements or DC-pulsed, magnetic signals. This module also includes optimization algorithms such as the Levenberg--Marquardt approach to optimize the calculated position. The localization module also involves a method to recognize and mitigate the multipath errors on the mobile station.

In the position_algos sub-directory you can find the implementations of the distance-based localization system (see the @ref distance_based module) as well as the implementations of the DC-pulsed, magnetic position system (see the @ref magnetic_based module). The pos_algos_common sub-directory contains common localization algorithms like the trilateration method (see the @ref pos_algos_common module). The optimization algorithms are localted in the optimization sub-directory providing the following optimization approaches:

  • Gauss--Newton (GN) algorithm.
  • Levenberg--Marquardt (LVM) algorithm.
  • Multipath Distance Detection and Mitigation (MDDM) algorithm.

See the @ref localization module for more detailed information.

examples

Here you find a number of example applications that demonstrate certain features of RcdMathLib. The examples found in this directory is a good starting point for anyone who is new to RcdMathLib.

For more information best browse that directory and have a look at the README.md files that ship with each example.

To create your own application - here or anywhere else - see @ref creating-an-application

doc

The doc directory contains the doxygen configuration and also contains the compiled doxygen output after running make doc.

Further information {#further-information}

  • @ref getting-started
  • @ref creating-an-application
  • @ref creating-modules