19 #include "../config.h"
20 #ifdef __MATRIXWRAPPER_BOOST__
22 #ifndef __MATRIX_BOOST__
23 #define __MATRIX_BOOST__
24 #include "../../bfl_constants.h"
25 #include "matrix_wrapper.h"
26 #include "vector_wrapper.h"
27 #include <boost/numeric/ublas/matrix.hpp>
28 #include <boost/numeric/ublas/lu.hpp>
29 #include <boost/numeric/ublas/symmetric.hpp>
30 #include <boost/numeric/ublas/io.hpp>
31 #include <boost/numeric/ublas/lu.hpp>
32 #include <boost/numeric/ublas/triangular.hpp>
33 #include <boost/numeric/ublas/storage.hpp>
34 #include <boost/numeric/ublas/matrix_proxy.hpp>
35 #include <boost/numeric/ublas/matrix_expression.hpp>
39 typedef boost::numeric::ublas::matrix<double> BoostMatrix;
40 typedef boost::numeric::ublas::symmetric_matrix<double, boost::numeric::ublas::lower> BoostSymmetricMatrix;
42 namespace MatrixWrapper
46 class Matrix :
public BoostMatrix,
public Matrix_Wrapper
60 Matrix (
const MyMatrix& a);
61 Matrix(
const BoostMatrix & a);
63 Matrix(
int num_rows,
const RowVector& v);
66 virtual unsigned int size()
const;
67 virtual unsigned int capacity()
const;
68 virtual unsigned int rows()
const;
69 virtual unsigned int columns()
const;
70 virtual double& operator()(
unsigned int,
unsigned int);
71 virtual double operator()(
unsigned int,
unsigned int)
const;
72 virtual RowVector operator[](
unsigned int)
const;
74 virtual bool operator==(
const MyMatrix& a)
const;
76 virtual MyMatrix& operator =(
double a);
78 virtual MyMatrix& operator +=(
double a);
79 virtual MyMatrix& operator -=(
double a);
80 virtual MyMatrix& operator *=(
double b);
81 virtual MyMatrix& operator /=(
double b);
82 virtual MyMatrix operator+ (
double b)
const;
83 virtual MyMatrix operator- (
double b)
const;
84 virtual MyMatrix operator* (
double b)
const;
85 virtual MyMatrix operator/ (
double b)
const;
87 virtual MyMatrix& operator =(
const MySymmetricMatrix& a);
88 virtual MyMatrix& operator +=(
const MyMatrix& a);
89 virtual MyMatrix& operator -=(
const MyMatrix& a);
90 virtual MyMatrix operator+ (
const MyMatrix &a)
const;
91 virtual MyMatrix operator- (
const MyMatrix &a)
const;
92 virtual MyMatrix operator* (
const MyMatrix &a)
const;
94 virtual MyColumnVector operator* (
const MyColumnVector &b)
const;
96 virtual MyRowVector rowCopy(
unsigned int r)
const;
97 virtual MyColumnVector columnCopy(
unsigned int c)
const;
99 virtual void resize(
unsigned int i,
unsigned int j,
100 bool copy=
true,
bool initialize=
true);
101 virtual MyMatrix inverse()
const;
102 virtual MyMatrix transpose()
const;
103 virtual double determinant()
const;
104 virtual int convertToSymmetricMatrix(MySymmetricMatrix& sym);
105 virtual MyMatrix sub(
int i_start,
int i_end,
int j_start ,
int j_end)
const;
109 class SymmetricMatrix :
public BoostSymmetricMatrix,
public SymmetricMatrix_Wrapper
116 SymmetricMatrix(
int n);
119 SymmetricMatrix(
const MySymmetricMatrix& a);
120 SymmetricMatrix(
const BoostSymmetricMatrix & a);
122 SymmetricMatrix(
int num_rows,
const RowVector& v);
125 virtual ~SymmetricMatrix();
127 virtual unsigned int size()
const;
128 virtual unsigned int capacity()
const;
129 virtual unsigned int rows()
const;
130 virtual unsigned int columns()
const;
131 virtual MySymmetricMatrix inverse()
const;
132 virtual MySymmetricMatrix transpose()
const;
133 virtual double determinant()
const;
135 virtual double& operator()(
unsigned int,
unsigned int);
136 virtual double operator()(
unsigned int,
unsigned int)
const;
137 virtual RowVector operator[](
unsigned int)
const;
138 virtual bool operator==(
const MySymmetricMatrix& a)
const;
140 virtual MySymmetricMatrix& operator=(
double a);
142 virtual MySymmetricMatrix& operator +=(
double a);
143 virtual MySymmetricMatrix& operator -=(
double a);
144 virtual MySymmetricMatrix& operator *=(
double b);
145 virtual MySymmetricMatrix& operator /=(
double b);
146 virtual MySymmetricMatrix operator + (
double b)
const;
147 virtual MySymmetricMatrix operator - (
double b)
const;
148 virtual MySymmetricMatrix operator * (
double b)
const;
149 virtual MySymmetricMatrix operator / (
double b)
const;
151 virtual MyRowVector rowCopy(
unsigned int r)
const;
153 virtual MyMatrix& operator +=(
const MyMatrix& a);
154 virtual MyMatrix& operator -=(
const MyMatrix& a);
155 virtual MyMatrix operator + (
const MyMatrix &a)
const;
156 virtual MyMatrix operator - (
const MyMatrix &a)
const;
157 virtual MyMatrix operator * (
const MyMatrix &a)
const;
159 virtual MySymmetricMatrix& operator +=(
const MySymmetricMatrix& a);
160 virtual MySymmetricMatrix& operator -=(
const MySymmetricMatrix& a);
161 virtual MySymmetricMatrix operator + (
const MySymmetricMatrix &a)
const;
162 virtual MySymmetricMatrix operator - (
const MySymmetricMatrix &a)
const;
163 virtual MyMatrix operator * (
const MySymmetricMatrix& a)
const;
165 virtual MyColumnVector operator* (
const MyColumnVector &b)
const;
166 virtual void multiply (
const MyColumnVector &b, MyColumnVector &result)
const;
168 virtual void resize(
unsigned int i,
bool copy=
true,
bool initialize=
true);
169 virtual MyMatrix sub(
int i_start,
int i_end,
int j_start ,
int j_end)
const;