From 862307cff068bee98318415aa15ab920a02838a2 Mon Sep 17 00:00:00 2001 From: Gertjan van den Burg Date: Thu, 8 Aug 2013 14:21:38 +0200 Subject: allow seeding of V and added documentation --- src/matrix.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/matrix.c (limited to 'src/matrix.c') diff --git a/src/matrix.c b/src/matrix.c new file mode 100644 index 0000000..fc29ecf --- /dev/null +++ b/src/matrix.c @@ -0,0 +1,76 @@ +/** + * @file matrix.c + * @author Gertjan van den Burg (burg@ese.eur.nl) + * @date August 8, 2013 + * @brief Functions facilitating matrix access + * + * @details + * The functions contained in this file are used when + * accessing or writing to matrices. Seperate functions + * exist of adding and multiplying existing matrix + * elements, to ensure this is done in place. + * + */ + +#include "matrix.h" + +/** + * @name matrix_set + * @brief Set element of matrix + * @ingroup matrix + * + * Row-Major order is used to set a matrix element. Since matrices + * of type double are most common in MSVMMaj, this function only + * deals with that type. + * + * @param [in] M matrix to set element of + * @param [in] cols number of columns of M + * @param [in] i row index of element to write to + * @param [in] j column index of element to write to + * @param [out] val value to write to specified element of M + */ +void matrix_set(double *M, long cols, long i, long j, double val) +{ + M[i*cols+j] = val; +} + +double matrix_get(double *M, long cols, long i, long j) +{ + return M[i*cols+j]; +} + +void matrix_add(double *M, long cols, long i, long j, double val) +{ + M[i*cols+j] += val; +} + +void matrix_mul(double *M, long cols, long i, long j, double val) +{ + M[i*cols+j] *= val; +} + +void matrix3_set(double *M, long N2, long N3, long i, long j, + long k, double val) +{ + M[k+N3*(j+N2*i)] = val; +} + +double matrix3_get(double *M, long N2, long N3, long i, long j, + long k) +{ + return M[k+N3*(j+N2*i)]; +} + + +void print_matrix(double *M, long rows, long cols) +{ + long i, j; + + for (i=0; i