aboutsummaryrefslogtreecommitdiff
path: root/src/matrix.c
diff options
context:
space:
mode:
authorGertjan van den Burg <burg@ese.eur.nl>2013-08-08 14:21:38 +0200
committerGertjan van den Burg <burg@ese.eur.nl>2013-08-08 14:21:38 +0200
commit862307cff068bee98318415aa15ab920a02838a2 (patch)
tree407a16f2ed4946c0ab67ed5737927fd3147b4b2a /src/matrix.c
parentchanged the update to ensure instances are iterated over once (diff)
downloadgensvm-862307cff068bee98318415aa15ab920a02838a2.tar.gz
gensvm-862307cff068bee98318415aa15ab920a02838a2.zip
allow seeding of V and added documentation
Diffstat (limited to 'src/matrix.c')
-rw-r--r--src/matrix.c76
1 files changed, 76 insertions, 0 deletions
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<rows; i++) {
+ for (j=0; j<cols; j++)
+ info("%8.8f ", matrix_get(M, cols, i, j));
+ info("\n");
+ }
+ info("\n");
+}
+