#ifndef Matrix_h #define Matrix_h 1 #include #include typedef double (*mapfn)(double); class matrix { int M; // number of rows int N; // number of columns double* X; // matrix pointer public: matrix(int m, int n, double* d = 0); matrix(int m , int n, unsigned int * d ); matrix(int m , int n, unsigned char * d ); matrix(int m, int n, const double& a); matrix(matrix const &a) : M(a.m()), N(a.n()) { X = new double [M*N]; double* t = a.x(); memcpy(X, t, M*N*sizeof(double)); }; matrix() { X = 0; }; ~matrix() { delete [] X; X = 0; }; void identity() const; int m() const { return M; }; int n() const { return N; }; double* x() const { return X; }; double* operator[] (int i) const { return &X[i*N]; }; operator double() const { return X[0]; }; operator double*() const { return X; }; matrix& operator= (matrix const &a); matrix& operator= (double const d); matrix& operator= (int const d); matrix& operator= (int* const d); matrix t() const; matrix c(int c) const; matrix sum() const; matrix sumsq() const; matrix min() const; matrix max() const; }; extern matrix operator* (const matrix& a, const double& b); extern matrix operator* (const double& a, const matrix& b); extern matrix operator* (const matrix& a, const matrix& b); extern matrix operator/ (const matrix& a, const double& b); extern matrix operator+ (const matrix& a, const double& b); extern matrix operator+ (const matrix& a, const matrix& b); extern matrix operator- (const matrix& a, const double& b); extern matrix operator- (const matrix& a, const matrix& b); extern int operator== (const matrix& a, const matrix& b); inline int operator!= (const matrix& a, const matrix& b) { return !(a == b); } #endif