X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flinal%2Fsquarematrix.h;h=b8531aafcb8359bcda6ea35628a9f561f77b677b;hb=fb1e198;hp=6cda86a5baa6b202ec00dba93acb0a152b03a985;hpb=839a88cd2b9a2f054323627c4e76cdcefc652c63;p=libs%2Fmath.git diff --git a/source/linal/squarematrix.h b/source/linal/squarematrix.h index 6cda86a..b8531aa 100644 --- a/source/linal/squarematrix.h +++ b/source/linal/squarematrix.h @@ -1,26 +1,64 @@ #ifndef MSP_LINAL_SQUAREMATRIX_H_ #define MSP_LINAL_SQUAREMATRIX_H_ +#include #include "matrix.h" +#include "matrixops.h" namespace Msp { namespace LinAl { +/** +A mathematical matrix with S rows and columns. Some operations are provided +here that are only possible for square matrices. +*/ template class SquareMatrix: public Matrix { public: - SquareMatrix(); - SquareMatrix(const T *); + SquareMatrix() { } + SquareMatrix(const T *d): Matrix(d) { } template - SquareMatrix(const Matrix &); + SquareMatrix(const Matrix &m): Matrix(m) { } + static SquareMatrix identity(); SquareMatrix &operator*=(const SquareMatrix &); - void invert(); + SquareMatrix &invert(); }; +template +inline SquareMatrix SquareMatrix::identity() +{ + SquareMatrix m; + for(unsigned i=0; i +SquareMatrix &SquareMatrix::operator*=(const SquareMatrix &m) +{ + return *this = *this*m; +} + +template +SquareMatrix &SquareMatrix::invert() +{ + SquareMatrix r = identity(); + gauss_jordan(*this, r); + return *this = r; +} + +template +inline SquareMatrix invert(const SquareMatrix &m) +{ + SquareMatrix temp = m; + SquareMatrix r = SquareMatrix::identity(); + return gauss_jordan(temp, r); +} + } // namespace LinAl } // namespace Msp