Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

matrix.hpp

Go to the documentation of this file.
00001 #ifndef MATRIX_HPP
00002 #define MATRIX_HPP
00003 
00004 #ifndef HANDLEXCEPTION
00005 #define HANDLEXCEPTION 0
00006 #endif
00007 
00019 
00020 
00022 class Vector {
00023 public:
00025     Vector() { }
00027     virtual ~Vector() { }
00029     virtual double elem(unsigned i) const = 0;
00031     virtual unsigned GetSize() const = 0;
00032 };
00033 
00035 class Matrix {
00036 public:
00038     Matrix() { }
00040     virtual ~Matrix() { }
00042     virtual unsigned GetNumRows() const = 0;
00044     virtual unsigned GetNumCols() const = 0;
00046     virtual double elem(unsigned i, unsigned j) const = 0;
00047 
00049 
00052     class Row : public Vector {
00053         friend class Matrix;
00054         const Matrix* M;
00055         const unsigned i;
00056         Row(const Matrix* _M, unsigned _i);
00057     public:
00058         double elem(unsigned j) const;
00059         unsigned GetSize() const;
00060     };
00062     Row GetRow(unsigned i) const;
00064 
00067     class Column : public Vector {
00068         friend class Matrix;
00069         const Matrix* M;
00070         const unsigned j;
00071         Column(const Matrix* _M, unsigned _j);
00072     public:
00073         double elem(unsigned i) const;
00074         unsigned GetSize() const;
00075     };
00077     Column GetCol(unsigned j) const;
00078 };
00079 
00080 
00082 class MatrixBinExpr : public Matrix {
00083 protected:
00084     const Matrix& M1;
00085     const Matrix& M2;
00086 public:
00088     MatrixBinExpr(const Matrix& _M1, const Matrix& _M2);
00089     // TODO: remove next comment
00090     // Matrix Calc() const; write calculated expr in matrix
00092     const Matrix& GetFirst() const;
00094     const Matrix& GetSecond() const;
00095     unsigned GetNumRows() const;
00096     unsigned GetNumCols() const;
00097 };
00098 
00100 class MatrixSum : public MatrixBinExpr {
00101 public:
00103     MatrixSum(const Matrix& _M1, const Matrix& _M2);
00104     double elem(unsigned i, unsigned j) const;
00105 };
00106 
00108 class MatrixSub : public MatrixBinExpr {
00109 public:
00111     MatrixSub(const Matrix& _M1, const Matrix& _M2);
00112     double elem(unsigned i, unsigned j) const;
00113 };
00114 
00116 enum {ReallocatableMatrix_add_allocsize = 10};
00117 
00119 
00122 class ReallocatableMatrix : public Matrix {
00123     unsigned num_rows;
00124     unsigned num_cols;
00125     unsigned allocsize;
00126     double **mat;
00127 public:
00129     ReallocatableMatrix(unsigned rows, unsigned start_cols);
00130     unsigned GetNumRows() const;
00131     unsigned GetNumCols() const;
00133     void Resize(unsigned needsize);
00135     double& elem(unsigned i, unsigned j);
00136     double elem(unsigned i, unsigned j) const;
00138     ~ReallocatableMatrix();
00139 };
00140 
00142 class FunctionMatrix : public Matrix {
00143     unsigned num_rows;
00144     unsigned num_cols;
00145     double h;
00146     double (*f)(unsigned, unsigned, double);
00147 public:
00149     FunctionMatrix(unsigned rows, unsigned cols, double _h,
00150             double (*func)(unsigned, unsigned, double));
00151     unsigned GetNumRows() const;
00152     unsigned GetNumCols() const;
00153     double elem(unsigned i, unsigned j) const;
00154 };
00155 
00156 #endif /* MATRIX_HPP */

Generated on Sun May 25 01:58:04 2025 for SmoluchowskiSolver by Doxygen