MatrixMath library for Arduino by Charlie Matlack contact: eecharlie in Arduino forums This library was modified from code posted by RobH45345, notably including replacement of the inversion algorithm. See the book NUMERICAL RECIPES: The Art of Scientific Computing.

The version of the library here (updated 4/3/2013) is patched for all Arduino library versions. A patch to make the original library workable for the DUE is discussed here

Briefly, the functions provided by MatrixMath:

void MatrixPrint(float* A, int m, int n, String label); void MatrixCopy(float* A, int n, int m, float* B); void MatrixMult(float* A, float* B, int m, int p, int n, float* C); void MatrixAdd(float* A, float* B, int m, int n, float* C); void MatrixSubtract(float* A, float* B, int m, int n, float* C); void MatrixTranspose(float* A, int m, int n, float* C); int MatrixInvert(float* A, int n);

Matrices should be stored in row-major arrays, which is fairly standard. The user must keep track of array dimensions and send them to the functions; mistakes on dimensions will not be caught by the library.

It's worth pointing out that the MatrixInvert() function uses Gauss-Jordan elimination with partial pivoting. Partial pivoting is a compromise between a numerically unstable algorithm and full pivoting, which involves more searching and swapping matrix elements.

**Also, the inversion algorithm stores the result matrix on top of the the input matrix, meaning no extra memory is allocated during inversion but your original matrix is gone.**

Grab the source code from GitHub, and put in a folder called MatrixMath.

Put the MatrixMath folder in "libraries\".

In the Arduino IDE, create a new sketch (or open one) and

select from the menubar "Sketch->Import Library->MatrixMath".

Once the library is imported, a "#include MatrixMath.h" line will appear at the top of your Sketch.

The MatrixMathExample in the Examples folder demonstrates multiplication and inversion using the MatrixPrint() function to show results.