00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "../config.h"
00020 #ifdef __MATRIXWRAPPER_BOOST__
00021
00022 #ifndef __MATRIX_BOOST__
00023 #define __MATRIX_BOOST__
00024 #include "../../bfl_constants.h"
00025 #include "matrix_wrapper.h"
00026 #include "vector_wrapper.h"
00027 #include <boost/numeric/ublas/matrix.hpp>
00028 #include <boost/numeric/ublas/lu.hpp>
00029 #include <boost/numeric/ublas/symmetric.hpp>
00030 #include <boost/numeric/ublas/io.hpp>
00031 #include <boost/numeric/ublas/lu.hpp>
00032 #include <boost/numeric/ublas/triangular.hpp>
00033 #include <boost/numeric/ublas/storage.hpp>
00034 #include <boost/numeric/ublas/matrix_proxy.hpp>
00035 #include <boost/numeric/ublas/matrix_expression.hpp>
00036 #include <assert.h>
00037
00038
00039 typedef boost::numeric::ublas::matrix<double> BoostMatrix;
00040 typedef boost::numeric::ublas::symmetric_matrix<double, boost::numeric::ublas::lower> BoostSymmetricMatrix;
00041
00042 namespace MatrixWrapper
00043 {
00044
00046 class Matrix : public BoostMatrix, public Matrix_Wrapper
00047 {
00048 private:
00049
00050 public:
00051
00052
00053 Matrix();
00054 Matrix(int m, int n);
00055
00056
00057 virtual ~Matrix();
00058
00059
00060 Matrix (const MyMatrix& a);
00061 Matrix(const BoostMatrix & a);
00062
00063 virtual unsigned int rows() const;
00064 virtual unsigned int columns() const;
00065 virtual double& operator()(unsigned int,unsigned int);
00066 virtual const double operator()(unsigned int,unsigned int) const;
00067 virtual const bool operator==(const MyMatrix& a) const;
00068
00069 virtual MyMatrix& operator =(double a);
00070
00071 virtual MyMatrix& operator +=(double a);
00072 virtual MyMatrix& operator -=(double a);
00073 virtual MyMatrix& operator *=(double b);
00074 virtual MyMatrix& operator /=(double b);
00075 virtual MyMatrix operator+ (double b) const;
00076 virtual MyMatrix operator- (double b) const;
00077 virtual MyMatrix operator* (double b) const;
00078 virtual MyMatrix operator/ (double b) const;
00079
00080 virtual MyMatrix& operator =(const MySymmetricMatrix& a);
00081 virtual MyMatrix& operator +=(const MyMatrix& a);
00082 virtual MyMatrix& operator -=(const MyMatrix& a);
00083 virtual MyMatrix operator+ (const MyMatrix &a) const;
00084 virtual MyMatrix operator- (const MyMatrix &a) const;
00085 virtual MyMatrix operator* (const MyMatrix &a) const;
00086
00087 virtual MyColumnVector operator* ( const MyColumnVector &b) const;
00088
00089 virtual MyRowVector rowCopy(unsigned int r) const;
00090 virtual MyColumnVector columnCopy(unsigned int c) const;
00091
00092 virtual void resize(unsigned int i, unsigned int j,
00093 bool copy=true, bool initialize=true);
00094 virtual MyMatrix inverse() const;
00095 virtual MyMatrix transpose() const;
00096 virtual double determinant() const;
00097 virtual int convertToSymmetricMatrix(MySymmetricMatrix& sym);
00098 virtual MyMatrix sub(int i_start, int i_end, int j_start , int j_end) const;
00099
00100 };
00101
00102 class SymmetricMatrix : public BoostSymmetricMatrix, public SymmetricMatrix_Wrapper
00103 {
00104 private:
00105
00106 public:
00107
00108 SymmetricMatrix();
00109 SymmetricMatrix(int n);
00110
00111
00112 SymmetricMatrix(const MySymmetricMatrix& a);
00113 SymmetricMatrix(const BoostSymmetricMatrix & a);
00114
00115
00116 virtual ~SymmetricMatrix();
00117
00118 virtual unsigned int rows() const;
00119 virtual unsigned int columns() const;
00120 virtual MySymmetricMatrix inverse() const;
00121 virtual MySymmetricMatrix transpose() const;
00122 virtual double determinant() const;
00123
00124 virtual double& operator()(unsigned int,unsigned int);
00125 virtual const double operator()(unsigned int,unsigned int) const;
00126 virtual const bool operator==(const MySymmetricMatrix& a) const;
00127
00128 virtual MySymmetricMatrix& operator=(double a);
00129
00130 virtual MySymmetricMatrix& operator +=(double a);
00131 virtual MySymmetricMatrix& operator -=(double a);
00132 virtual MySymmetricMatrix& operator *=(double b);
00133 virtual MySymmetricMatrix& operator /=(double b);
00134 virtual MySymmetricMatrix operator + (double b) const;
00135 virtual MySymmetricMatrix operator - (double b) const;
00136 virtual MySymmetricMatrix operator * (double b) const;
00137 virtual MySymmetricMatrix operator / (double b) const;
00138
00139 virtual MyMatrix& operator +=(const MyMatrix& a);
00140 virtual MyMatrix& operator -=(const MyMatrix& a);
00141 virtual MyMatrix operator + (const MyMatrix &a) const;
00142 virtual MyMatrix operator - (const MyMatrix &a) const;
00143 virtual MyMatrix operator * (const MyMatrix &a) const;
00144
00145 virtual MySymmetricMatrix& operator +=(const MySymmetricMatrix& a);
00146 virtual MySymmetricMatrix& operator -=(const MySymmetricMatrix& a);
00147 virtual MySymmetricMatrix operator + (const MySymmetricMatrix &a) const;
00148 virtual MySymmetricMatrix operator - (const MySymmetricMatrix &a) const;
00149 virtual MyMatrix operator * (const MySymmetricMatrix& a) const;
00150
00151 virtual MyColumnVector operator* (const MyColumnVector &b) const;
00152 virtual void multiply (const MyColumnVector &b, MyColumnVector &result) const;
00153
00154 virtual void resize(unsigned int i, bool copy=true, bool initialize=true);
00155 virtual MyMatrix sub(int i_start, int i_end, int j_start , int j_end) const;
00156
00157 };
00158
00159 }
00160
00161 #endif
00162
00163 #endif