22 #ifndef var_symmetric_matrix_h
23 #define var_symmetric_matrix_h
71 Matrix(
int m, Init ini=INIT,
const AT &a=0) : M(m), ele(new AT[M*M]) { init(a); }
72 Matrix(
int m, Eye ini,
const AT &a=1) : M(m), ele(new AT[M*M]) { init(ini,a); }
73 Matrix(
int m,
int n, Noinit) : M(m), ele(new AT[M*M]) { }
74 Matrix(
int m,
int n, Init ini=INIT,
const AT &a=0) : M(m), ele(new AT[M*M]) { init(a); }
75 Matrix(
int m,
int n, Eye ini,
const AT &a=1) : M(m), ele(new AT[M*M]) { init(ini,a); }
94 explicit Matrix(
const Matrix<General,Fixed<M>,Fixed<M>,AT>& A) : M(A.M), ele(new AT[M*M]) {
98 template<
class Type,
class Row,
class Col>
99 explicit Matrix(
const Matrix<Type,Row,Col,AT> &A) : M(A.
rows()), ele(new AT[M*M]) {
101 #ifndef FMATVEC_NO_SIZE_CHECK
102 assert(A.rows() == M);
103 assert(A.cols() == M);
122 Matrix<Symmetric,Var,Var,AT>& resize(
int m, Noinit) {
129 Matrix<Symmetric,Var,Var,AT>& resize(
int m, Init ini=INIT,
const AT &a=0) {
return resize(m,Noinit()).
init(a); }
131 Matrix<Symmetric,Var,Var,AT>& resize(
int m, Eye ini,
const AT &a=1) {
return resize(m,Noinit()).
init(ini,a); }
139 inline Matrix<Symmetric,Var,Var,AT>& operator=(
const Matrix<Symmetric,Var,Var,AT> &A);
141 template<
class Type,
class Row,
class Col>
142 inline Matrix<Symmetric,Var,Var,AT>& operator=(
const Matrix<Type,Row,Col,AT> &A);
144 template<
class Type,
class Row,
class Col>
145 inline Matrix<Symmetric,Var,Var,AT>& operator<<(const Matrix<Type,Row,Col,AT> &A);
159 #ifndef FMATVEC_NO_BOUNDS_CHECK
174 #ifndef FMATVEC_NO_BOUNDS_CHECK
184 AT& ei(
int i,
int j) {
188 const AT& ei(
int i,
int j)
const {
192 AT& ej(
int i,
int j) {
196 const AT& ej(
int i,
int j)
const {
200 AT& e(
int i,
int j) {
201 return j > i ? ej(i,j) : ei(i,j);
204 const AT& e(
int i,
int j)
const {
205 return j > i ? ej(i,j) : ei(i,j);
253 return CblasColMajor;
276 inline Matrix<Symmetric,Var,Var,AT>& init(Eye eye,
const AT &a=1);
277 inline Matrix<Symmetric,Var,Var,AT>& init(Noinit,
const AT &a=0) {
return *
this; }
283 inline operator std::vector<std::vector<AT> >();
294 #ifndef FMATVEC_NO_SIZE_CHECK
295 assert(M == A.
size());
304 template <
class AT>
template <
class Type,
class Row,
class Col>
312 #ifndef FMATVEC_NO_SIZE_CHECK
314 assert(M == A.
rows());
323 template <
class AT>
template <
class Type,
class Row,
class Col>
324 inline Matrix<Symmetric,Var,Var,AT>& Matrix<Symmetric,Var,Var,AT>::operator<<(
const Matrix<Type,Row,Col,AT> &A) {
326 #ifndef FMATVEC_NO_SIZE_CHECK
327 assert(A.rows() == A.cols());
344 for(
int i=0; i<M; i++)
345 for(
int j=i; j<M; j++)
354 for(
int i=0; i<size(); i++) {
356 for(
int j=i+1; j<size(); j++) {
365 std::vector<std::vector<AT> > ret(rows());
366 for(
int r=0; r<rows(); r++) {
367 ret[r].resize(cols());
368 for(
int c=0; c<cols(); c++)
369 ret[r][c]=
operator()(r,c);
376 template <
class AT>
template <
class Type,
class Row,
class Col>
378 for(
int i=0; i<M; i++)
379 for(
int j=i; j<M; j++)
383 template <
class AT>
template <
class Row>
384 inline void Matrix<Symmetric,Var,Var,AT>::deepCopy(
const Matrix<Symmetric,Row,Row,AT> &A) {
385 for(
int i=0; i<M; i++)
386 for(
int j=i; j<M; j++)
This is a matrix class for symmetric matrices.
Definition: var_symmetric_matrix.h:37
This is the basic matrix class for arbitrary matrices.
Definition: matrix.h:56
int rows() const
Number of rows.
Definition: var_symmetric_matrix.h:231
Shape class for symmetric matrices.
Definition: types.h:116
int ldim() const
Leading dimension.
Definition: var_symmetric_matrix.h:243
const CBLAS_UPLO blasUplo() const
Symmetry convention.
Definition: var_symmetric_matrix.h:263
int rows() const
Number of rows.
Matrix< Symmetric, Var, Var, AT > & init(const AT &a=0)
Initialization.
Definition: var_symmetric_matrix.h:342
int cols() const
Number of columns.
Matrix(const Matrix< Symmetric, Var, Var, AT > &A)
Copy Constructor.
Definition: var_symmetric_matrix.h:84
AT * operator()()
Pointer operator.
Definition: var_symmetric_matrix.h:213
AT & operator()(int i, int j)
Element operator.
Definition: var_symmetric_matrix.h:158
const AT * operator()() const
Pointer operator.
Definition: var_symmetric_matrix.h:219
~Matrix()
Destructor.
Definition: var_symmetric_matrix.h:111
Matrix()
Standard constructor.
Definition: var_symmetric_matrix.h:58
const CBLAS_ORDER blasOrder() const
Storage convention.
Definition: var_symmetric_matrix.h:252
int size() const
Size.
Definition: var_symmetric_matrix.h:225
const AT & operator()(int i, int j) const
Element operator.
Definition: var_symmetric_matrix.h:173
int cols() const
Number of columns.
Definition: var_symmetric_matrix.h:237