MathTL
algebra/fixed_matrix.h
00001 // -*- c++ -*-
00002 
00003 // +--------------------------------------------------------------------+
00004 // | This file is part of MathTL - the Mathematical Template Library    |
00005 // |                                                                    |
00006 // | Copyright (c) 2002-2009                                            |
00007 // | Thorsten Raasch, Manuel Werner, Andreas Schneider                  |
00008 // +--------------------------------------------------------------------+
00009 
00010 #ifndef _MATHTL_FIXED_MATRIX_H
00011 #define _MATHTL_FIXED_MATRIX_H
00012 
00013 #include <iostream>
00014 #include <algebra/fixed_vector.h>
00015 
00016 // matrix norms, for convenience
00017 #include <algebra/matrix_norms.h>
00018 
00019 namespace MathTL
00020 {
00027   template <class C, unsigned int ROW_DIM, unsigned int COL_DIM = ROW_DIM>
00028   class FixedMatrix
00029   {
00030     public:
00034     typedef typename FixedVector<C,ROW_DIM*COL_DIM>::size_type size_type;
00035     
00036     /* constructors and destructors ****************************************/
00041     FixedMatrix(const C value = 0);
00042 
00046     FixedMatrix(const int value);
00047 
00051     FixedMatrix(const FixedMatrix<C, ROW_DIM, COL_DIM>& M);
00052 
00058     explicit FixedMatrix(const char* str, const bool byrow = true);
00059 
00067     explicit FixedMatrix(const char* str, const C denominator, const bool byrow);
00068 
00072     ~FixedMatrix();
00073 
00074     /* member functions and operators **************************************/
00078     const size_type row_dimension() const;
00079 
00083     const size_type column_dimension() const;
00084 
00088     const size_type size() const;
00089 
00093     const size_type memory_consumption() const;
00094 
00098     bool empty() const;
00099 
00103     const C get_entry(const size_type row, const size_type column) const;
00104 
00108     const C operator () (const size_type row, const size_type column) const;
00109 
00113     void set_entry(const size_type row, const size_type column, const C value);
00114 
00118     C& operator () (const size_type row, const size_type column);
00119     
00123     template <class C2>
00124     bool operator == (const FixedMatrix<C2, ROW_DIM, COL_DIM>& M) const;
00125 
00129     template <class C2>
00130     bool operator != (const FixedMatrix<C2, ROW_DIM, COL_DIM>& M) const;
00131 
00135     FixedMatrix<C, ROW_DIM, COL_DIM>& operator = (const FixedMatrix<C, ROW_DIM, COL_DIM>& M);
00136 
00140     void scale(const C s);
00141 
00145     void operator *= (const C s);
00146 
00150     void add(const FixedMatrix<C, ROW_DIM, COL_DIM>& M, const C s = 1);
00151 
00155     void operator += (const FixedMatrix<C, ROW_DIM, COL_DIM>& M);
00156 
00160     void operator -= (const FixedMatrix<C, ROW_DIM, COL_DIM>& M);
00161 
00167     template <class VECTOR>
00168     void apply(const VECTOR& x, VECTOR& Mx) const;
00169 
00171     void apply(const FixedVector<C, COL_DIM>& x, FixedVector<C, ROW_DIM>& Mx) const;
00172 
00178     template <class VECTOR>
00179     void apply_transposed(const VECTOR& x, VECTOR& Mtx) const;
00180 
00182     void apply_transposed(const FixedVector<C, ROW_DIM>& x, FixedVector<C, COL_DIM>& Mtx) const;
00183 
00188     void print(std::ostream& os,
00189                const unsigned int tabwidth = 10,
00190                const unsigned int precision = 3) const;
00191 
00192 
00193     /* private member functions ********************************************/
00194     private:
00198     void setup_matrix(const char* str, const bool byrow = true);
00199 
00200 
00201     /* private data fields *************************************************/
00202     private:
00208     FixedVector<C, ROW_DIM*COL_DIM> entries_;
00209   };
00210 
00211 
00215   template <class C, unsigned int ROW_DIM, unsigned int COL_DIM>
00216   FixedMatrix<C, ROW_DIM, COL_DIM> operator - (const FixedMatrix<C, ROW_DIM, COL_DIM>& M, const FixedMatrix<C, ROW_DIM, COL_DIM>& N);
00217 
00221   template <class C, unsigned int ROW_DIM, unsigned int COL_DIM, unsigned int COL_DIM2>
00222   FixedMatrix<C, ROW_DIM, COL_DIM> operator * (const FixedMatrix<C, ROW_DIM, COL_DIM>& M, const FixedMatrix<C, COL_DIM, COL_DIM2>& N);
00223 
00227   template <class C, unsigned int ROW_DIM, unsigned int COL_DIM>
00228   FixedMatrix<C, COL_DIM, ROW_DIM> transpose(const FixedMatrix<C, ROW_DIM, COL_DIM>& M);
00229 
00233   template <class C, unsigned int ROW_DIM, unsigned int COL_DIM>
00234   std::ostream& operator << (std::ostream& os, const FixedMatrix<C, ROW_DIM, COL_DIM>& M);
00235 
00236 }
00237 
00238 // include implementation of inline functions
00239 #include <algebra/fixed_matrix.cpp>
00240 
00241 #endif // _MATHTL_FIXED_MATRIX_H
 All Classes Functions Variables Typedefs Enumerations