MathTL
|
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