/* * N dimensional matrix operations */ #pragma once #include "math.h" #include #include "vectorN.h" template class VectorN; template class MatrixN { friend class VectorN; public: // constructor from zeros MatrixN(void) { memset(v, 0, sizeof(v)); } // constructor from 4 diagonals MatrixN(const float d[N]) { memset(v, 0, sizeof(v)); for (uint8_t i = 0; i < N; i++) { v[i][i] = d[i]; } } // multiply two vectors to give a matrix, in-place void mult(const VectorN &A, const VectorN &B); // subtract B from the matrix MatrixN &operator -=(const MatrixN &B); // add B to the matrix MatrixN &operator +=(const MatrixN &B); // Matrix symmetry routine void force_symmetry(void); private: T v[N][N]; };