Bayesian Filtering Library  Generated from SVN r
matrix_EIGEN.h
1 #include "../config.h"
2 #ifdef __MATRIXWRAPPER_EIGEN__
3 
4 #ifndef __MATRIX_EIGEN__
5 #define __MATRIX_EIGEN__
6 #include "../../bfl_constants.h"
7 #include "matrix_wrapper.h"
8 #include "vector_wrapper.h"
9 
10 #include <Eigen/Core>
11 #include <assert.h>
12 
13 typedef Eigen::MatrixXd EigenMatrix;
14 typedef Eigen::MatrixXd EigenSymmetricMatrix;
15 typedef Eigen::MatrixXd::ConstSelfAdjointViewReturnType<Eigen::Upper>::Type EigenSymmetricView;
16 
17 namespace MatrixWrapper
18 {
19 
21 class Matrix : public EigenMatrix, public Matrix_Wrapper
22 {
23  private: // No private members: We don't add anything.
24 
25  public: // Public Members
26 
27  // Constructors
28  Matrix();
29  Matrix(int m, int n);
30 
31  // Destructor
32  virtual ~Matrix();
33 
34  // Copy constructor
35  Matrix (const MyMatrix& a);
36  Matrix(const EigenMatrix & a);
37 
38  Matrix(int num_rows,const RowVector& v);
39 
40 
41  virtual unsigned int size() const;
42  virtual unsigned int capacity() const;
43  virtual unsigned int rows() const;
44  virtual unsigned int columns() const;
45  virtual double& operator()(unsigned int,unsigned int);
46  virtual double operator()(unsigned int,unsigned int) const;
47  virtual RowVector operator[](unsigned int)const;
48 
49  using EigenMatrix::operator ==;
50  using EigenMatrix::operator =;
51  using EigenMatrix::operator +=;
52  using EigenMatrix::operator -=;
53  using EigenMatrix::operator +;
54  using EigenMatrix::operator -;
55 
56  virtual bool operator==(const MyMatrix& a) const;
57 
58  virtual MyMatrix& operator =(double a);
59 
60  virtual MyMatrix& operator +=(double a);
61  virtual MyMatrix& operator -=(double a);
62  virtual MyMatrix& operator *=(double b);
63  virtual MyMatrix& operator /=(double b);
64  virtual MyMatrix operator+ (double b) const;
65  virtual MyMatrix operator- (double b) const;
66  virtual MyMatrix operator* (double b) const;
67  virtual MyMatrix operator/ (double b) const;
68 
69  virtual MyMatrix& operator =(const MySymmetricMatrix& a);
70  virtual MyMatrix& operator +=(const MyMatrix& a);
71  virtual MyMatrix& operator -=(const MyMatrix& a);
72  virtual MyMatrix operator+ (const MyMatrix &a) const;
73  virtual MyMatrix operator- (const MyMatrix &a) const;
74  virtual MyMatrix operator* (const MyMatrix &a) const;
75 
76  virtual MyColumnVector operator* ( const MyColumnVector &b) const;
77 
78  virtual MyRowVector rowCopy(unsigned int r) const;
79  virtual MyColumnVector columnCopy(unsigned int c) const;
80 
81  virtual void resize(unsigned int i, unsigned int j,
82  bool copy=true, bool initialize=true);
83  virtual MyMatrix inverse() const;
84  virtual MyMatrix transpose() const;
85  virtual double determinant() const;
86  virtual int convertToSymmetricMatrix(MySymmetricMatrix& sym);
87  virtual MyMatrix sub(int i_start, int i_end, int j_start , int j_end) const;
88 
89 };
90 
91 class SymmetricMatrix : public EigenSymmetricMatrix, public SymmetricMatrix_Wrapper
92 {
93  private: //
94 
95  public: //
96  // Constructors
97  SymmetricMatrix();
98  SymmetricMatrix(int n);
99 
100  // Copy constructors
101  SymmetricMatrix(const MySymmetricMatrix& a);
102  SymmetricMatrix(const EigenSymmetricMatrix& a);
103  SymmetricMatrix(const EigenSymmetricView & a);
104 
105  SymmetricMatrix(int num_rows,const RowVector& v);
106 
107  // Destructor
108  virtual ~SymmetricMatrix();
109 
110  virtual unsigned int size() const;
111  virtual unsigned int capacity() const;
112  virtual unsigned int rows() const;
113  virtual unsigned int columns() const;
114  virtual MySymmetricMatrix inverse() const;
115  virtual MySymmetricMatrix transpose() const;
116  virtual double determinant() const;
117 
118  virtual double& operator()(unsigned int,unsigned int);
119  virtual double operator()(unsigned int,unsigned int) const;
120  virtual RowVector operator[](unsigned int)const;
121 
122  using EigenSymmetricMatrix::operator ==;
123  using EigenSymmetricMatrix::operator =;
124  using EigenSymmetricMatrix::operator +=;
125  using EigenSymmetricMatrix::operator -=;
126  using EigenSymmetricMatrix::operator +;
127  using EigenSymmetricMatrix::operator -;
128 
129  virtual bool operator==(const MySymmetricMatrix& a) const;
130 
131  virtual MySymmetricMatrix& operator=(double a);
132 
133  virtual MySymmetricMatrix& operator +=(double a);
134  virtual MySymmetricMatrix& operator -=(double a);
135  virtual MySymmetricMatrix& operator *=(double b);
136  virtual MySymmetricMatrix& operator /=(double b);
137  virtual MySymmetricMatrix operator + (double b) const;
138  virtual MySymmetricMatrix operator - (double b) const;
139  virtual MySymmetricMatrix operator * (double b) const;
140  virtual MySymmetricMatrix operator / (double b) const;
141 
142  virtual MyRowVector rowCopy(unsigned int r) const;
143 
144  virtual MyMatrix& operator +=(const MyMatrix& a);
145  virtual MyMatrix& operator -=(const MyMatrix& a);
146  virtual MyMatrix operator + (const MyMatrix &a) const;
147  virtual MyMatrix operator - (const MyMatrix &a) const;
148  virtual MyMatrix operator * (const MyMatrix &a) const;
149 
150  virtual MySymmetricMatrix& operator +=(const MySymmetricMatrix& a);
151  virtual MySymmetricMatrix& operator -=(const MySymmetricMatrix& a);
152  virtual MySymmetricMatrix operator + (const MySymmetricMatrix &a) const;
153  virtual MySymmetricMatrix operator - (const MySymmetricMatrix &a) const;
154  virtual MyMatrix operator * (const MySymmetricMatrix& a) const;
155 
156  virtual MyColumnVector operator* (const MyColumnVector &b) const;
157  virtual void multiply (const MyColumnVector &b, MyColumnVector &result) const;
158 
159  virtual void resize(unsigned int i, bool copy=true, bool initialize=true);
160  virtual MyMatrix sub(int i_start, int i_end, int j_start , int j_end) const;
161 
162 };
163 
164 }
165 
166 #endif
167 
168 #endif