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

plFloatMatrix.h

00001 /*=============================================================================
00002  * Product        : OpenPL 
00003  * File           : plFloatMatrix.h
00004  * Author         : Christophe Coue
00005  * Creation       : Mar 12 2001
00006  *
00007  *=============================================================================
00008  *     (c) Copyright 2000, Centre National de la Recherche Scientifique,
00009  *                              all rights reserved
00010  *=============================================================================
00011  *
00012  *------------------------- Description ---------------------------------------
00013  *    for kalman filter
00014  *   
00015  *-----------------------------------------------------------------------------
00016 */
00017 #ifndef __FLOAT_MATRIX_H
00018 #define __FLOAT_MATRIX_H
00019 
00020 
00021 #include <plObject.h>
00022 #include <plMath.h>
00023 #include <plFloatVector.h>
00024 #include <plError.h>
00025 
00026 
00027 #define Error_Number 15
00028 
00029 
00030 /*****************************************************************************
00031  *                           Classes Definitions
00032  *****************************************************************************/
00033 
00034 
00036 class plFloatMatrix :public plObject
00037 {
00038 
00039 protected:
00041   void Output(ostream &out) const;
00042 
00043   void init(unsigned int r, unsigned int c, bool init_to_zero);
00044 
00045  protected:  
00046   plFloat **m;
00047 
00048   unsigned int rz;
00049   unsigned int cz;
00050 
00051 
00052   plFloat elem_check(unsigned int r, unsigned int c) const;
00053   plFloat& elem_check(unsigned int r, unsigned int c);
00054 
00055  public:
00056 
00058   plFloatMatrix();
00059   
00061   plFloatMatrix( unsigned int r, unsigned int c, bool init_to_zero = false);
00062 
00064   plFloatMatrix( unsigned int d, bool init_to_zero = false);
00065 
00070   plFloatMatrix( unsigned int d, const float * float_vector);
00071    
00076   plFloatMatrix( unsigned int d, const double * double_vector);
00077 
00083   plFloatMatrix( unsigned int d, const long double * long_double_vector);
00084 
00085   
00090   explicit plFloatMatrix(const vector <float> &float_vector);
00091    
00096   explicit plFloatMatrix(const vector <double> &double_vector);
00097 
00103   explicit plFloatMatrix(const vector <long double> &long_double_vector);
00104   
00105   
00107   explicit plFloatMatrix(const vector <vector <float> > &stl_matrix);
00108    
00110   explicit plFloatMatrix(const vector <vector <double> > &stl_matrix);
00111 
00113   explicit plFloatMatrix(const vector <vector <long double> > &stl_matrix);
00114 
00116   plFloatMatrix( const plFloatMatrix &);
00117 
00119   explicit plFloatMatrix( const plFloatVector &diag_vector);
00120 
00122   void resize(unsigned int nr, unsigned int nc, bool init_to_zero = false);
00123   
00125   void resize(unsigned int nr, bool init_to_zero = false);
00126 
00128   virtual ~plFloatMatrix();
00129 
00131   unsigned int rows() const {return rz;};
00132 
00134   unsigned int cols() const {return cz;};
00135 
00137   plFloat operator()(unsigned int r, unsigned int c) const { return elem_check(r,c); };
00138 
00140   plFloat& operator()(unsigned int r, unsigned int c) { return elem_check(r,c); };
00141 
00142 #ifndef RAVI_INTERFACE
00143 
00144   plFloat* operator[](unsigned int i) const { return m[i];};
00145   
00147   plFloat* operator[](unsigned int i) { return m[i];};
00148 #endif
00149 
00151   plFloatVector row(unsigned int i) const;
00152 
00154   plFloatVector column(unsigned int j) const;  // construit un plFloatVector a partir de la colonne j 
00155 
00156   /* operateurs */
00157 
00159   plFloatMatrix& operator=(const plFloatMatrix &);
00160 
00162   plFloatMatrix operator+(const plFloatMatrix&) const; 
00163   
00164   
00166   plFloatMatrix &operator+=(const plFloatMatrix&);
00167 
00169   plFloatMatrix operator-(const plFloatMatrix&) const;
00170   
00172   plFloatMatrix &operator-=(const plFloatMatrix&);
00173 
00175   plFloatMatrix operator*(const plFloatMatrix&) const;
00176 
00178   friend plFloatMatrix operator*(const long double&,const plFloatMatrix&);
00179 
00181   friend plFloatMatrix operator*(const double&,const plFloatMatrix&);
00182 
00184   friend plFloatMatrix operator*(const float&,const plFloatMatrix&);
00185   
00187   friend plFloatMatrix operator*(const int&,const plFloatMatrix&);
00188 
00190   friend plFloatMatrix operator*(const unsigned int&,const plFloatMatrix&);
00191 
00192 
00193   
00195   plFloatVector operator*(const plFloatVector&) const;
00196 
00198   bool operator==(const plFloatMatrix&) const;
00199 
00201   plFloatMatrix transpose() const;
00202 
00204   void transpose(plFloatMatrix & result) const;
00205 
00207   plFloat trace() const;
00208 
00213   plFloat inverse(plFloatMatrix& inverse,plFloat threshold=PL_ONE) const;
00214 
00221   void diagonalize( plFloatMatrix& Eigen_Matrix , plFloatVector& Eigen_Vector) const;
00222   
00224   void reset();
00225   
00227   void reset(float val);
00228   
00230   void reset(double val);
00231   
00233   void reset(long double val);
00234 
00235 };
00236 
00237 
00238 #endif
00239 

Generated on Fri Apr 1 10:58:13 2005 for ProBT by  doxygen 1.4.1