**matrixcomp.c**

https://github.com/GianlucaMancusi/matrix_computation

This github project is created by Gianluca Mancusi, Daniele Manicardi, Gianmarco Lusvardi – from the “Enzo Ferrari” Department of Engineering. Some useful Matrix Calculation tools optimized for each system.

This C library is designed to **perform calculations on matrix**. Here are some of the cool features:

**Determinant**of a square matrix (Laplace’s method)- Possibility to reduce a matrix in
**rowEchelonForm** - In-situ
**matrix transposition**(uses a lightweight auxiliary table to perform it on rectangular matrices) - Fast matrix row edits (matrices are stored by rows)
- Matrix multiplication

We are pleased to receiving support!

##### //====== Useful functions =======

Calculates the **determinant** of any squared matrix of any dimension (NxN):

extern double det(const struct matrix *matr);

Reduce a matrix in** row echelon form**. For more information see Wikipedia

extern void rowEchelonForm(struct matrix *matr);

**Transpose** the input matrix (very fast):

extern void transposeMatrix(struct matrix *matr);

**Multiply** two compatible matrices:

extern struct matrix *mulmatr(const struct matrix *lhs, const struct matrix *rhs);

Creates a **new** matrix in the single pointer format:

extern struct matrix *creatematr(size_t rows, size_t cols);

Create a **new empty** matrix in the single pointer format:

extern struct matrix *createemptymatr(size_t rows, size_t cols);

Create a **new “cloned from other”** matrix in the single pointer format:

extern struct matrix *creatematrfrom(const double* matr, size_t row, size_t col);

**Clone** a matrix:

extern struct matrix *clonematr(const struct matrix* matr);

This feature allows you to find the **complementary minor** given rows and columns:

extern struct matrix* matrcompminor(const struct matrix *matr, int row, int col);

Change an entire row:

extern int matrrow(const struct matrix* matr, size_t rowid, const double *row);

Destroy and free memory of an allocated matrix:

extern void destroymatr(struct matrix* matr);

Fast way to **access an element** of a matrix without thinking too much about it:

extern double *elementAt(struct matrix *matr, size_t rowIndex, size_t colIndex);

Print to File a matrix (to print on screen use “stdout” standard file):

extern void printMatrix(struct matrix *matr, FILE *f);