#ifndef __MAT_H #define __MAT_H /*! \file mat.hh \brief static matrix \date 15 April 2010 \author Clemens Pechstein Institute of Computational Mathematics Johannes Kepler University Linz, Austria Tutorials -- Numerical methods for elliptic PDEs summer semester 2010 */ #include #include #include "vec.hh" template class Mat { public: /// default constructor Mat () { for (int k=0; k& v, Vec& res) const { assert (&v != &res && "check to avoid side effect"); for (int i=0; i operator* (const Vec& v) const { Vec res; apply (v, res); return res; } /// transposed matrix vector multiplication void applyTrans (const Vec& v, Vec& res) const { assert (&v != &res && "check to avoid side effect"); res = 0; for (int i=0; i Mat operator+ (const Mat& m1, const Mat& m2) { Mat res(m1); // copy res += m2; return res; } /// matrix subtraction template Mat operator- (const Mat& m1, const Mat& m2) { Mat res(m1); // copy res -= m2; return res; } /// scale matrix template Mat operator* (const double factor, const Mat& m) { Mat res(m); res *= factor; return res; } /// output template std::ostream& operator<< (std::ostream& os, const Mat& m) { m.print (os); return os; } #endif // __MAT_H