22#ifndef diagonal_matrix_h
23#define diagonal_matrix_h
51 const AT* elePtr(
int i)
const {
62 static constexpr bool isVector {
false};
64 using value_type = AT;
71 explicit Matrix() : memory(), ele(0) { }
78 explicit Matrix(
int n_,
Noinit) : memory(n_), ele((AT*)memory.get()), n(n_) { }
79 explicit Matrix(
int n_, Init ini=INIT,
const AT &a=AT()) : memory(n_), ele((AT*)memory.get()), n(n_) { init(a); }
80 explicit Matrix(
int n_, Eye ini,
const AT &a=1) : memory(n_), ele((AT*)memory.get()), n(n_) { init(ini,a); }
81 explicit Matrix(
int m_,
int n_, Noinit) : memory(n_), ele((AT*)memory.get()), n(n_) { }
97 template<
class Type,
class Row,
class Col>
99 FMATVEC_ASSERT(A.
rows() == A.
cols(), AT);
110 ele = (AT*)memory.get();
115 Matrix<Diagonal,Ref,Ref,AT>& resize(
int n, Eye ini,
const AT &a=1) { resize(n,Noinit()).
init(ini,a); }
124 FMATVEC_ASSERT(n == A.n, AT);
134 template<
class Type,
class Row,
class Col>
136 FMATVEC_ASSERT(n == A.
rows(), AT);
137 FMATVEC_ASSERT(n == A.
cols(), AT);
160 template<
class Type,
class Row,
class Col>
162 if(n!=A.n) resize(A.
rows(),NONINIT);
177 FMATVEC_ASSERT(i>=0, AT);
178 FMATVEC_ASSERT(j>=0, AT);
179 FMATVEC_ASSERT(i<n, AT);
180 FMATVEC_ASSERT(j<n, AT);
191 FMATVEC_ASSERT(i>=0, AT);
192 FMATVEC_ASSERT(i<n, AT);
207 FMATVEC_ASSERT(i>=0, AT);
208 FMATVEC_ASSERT(i<n, AT);
213 const AT& e(
int i,
int j)
const {
215 return i==j ? ele[i] : zero;
218 const AT& e(
int i)
const {
269 return CblasColMajor;
281 inline Matrix<Diagonal,Ref,Ref,AT>& init(Eye,
const AT &a=1) {
return init(a); }
282 inline Matrix<Diagonal,Ref,Ref,AT>& init(Noinit,
const AT &a=AT()) {
return *
this; }
288 explicit operator std::vector<std::vector<AT>>()
const;
295 explicit Matrix(
const std::vector<std::vector<AT>> &m);
315 std::vector<std::vector<AT>> ret(rows(),std::vector<AT>(cols(),AT()));
316 for(
int r=0; r<rows(); r++) {
324 for(
size_t r=0; r<m.size(); ++r) {
325 if(n!=
static_cast<int>(m[r].size()))
326 throw std::runtime_error(
"The rows of the input have different lenght.");
327 for(
size_t c=0; c<m[r].size(); ++c) {
330 if(r!=c && (fabs(m[r][c])>1e-13 || fabs(m[r][c])>1e-13))
331 throw std::runtime_error(
"The input is not diagonal.");
338 for(
int i=0; i<
rows(); i++)
345 for(
int i=0; i<n; i++)
Shape class for diagonal matrices.
Definition: types.h:148
This is a matrix class for diagonal matrices.
Definition: diagonal_matrix.h:39
int rows() const
Number of rows.
Definition: diagonal_matrix.h:247
AT & operator()(int i)
Element operator.
Definition: diagonal_matrix.h:205
const AT * operator()() const
Pointer operator.
Definition: diagonal_matrix.h:230
Matrix< Diagonal, Ref, Ref, AT > & operator&=(Matrix< Diagonal, Ref, Ref, AT > &A)
Reference operator.
Definition: diagonal_matrix.h:147
AT * operator()()
Pointer operator.
Definition: diagonal_matrix.h:239
int cols() const
Number of columns.
Definition: diagonal_matrix.h:253
~Matrix()=default
Destructor.
int size() const
Number of rows and columns.
Definition: diagonal_matrix.h:259
Matrix(const Matrix< Diagonal, Ref, Ref, AT > &A)
Copy Constructor.
Definition: diagonal_matrix.h:88
CBLAS_ORDER blasOrder() const
Storage convention.
Definition: diagonal_matrix.h:268
Matrix< Diagonal, Ref, Ref, AT > & operator=(const Matrix< Diagonal, Ref, Ref, AT > &A)
Assignment operator.
Definition: diagonal_matrix.h:123
const AT & operator()(int i) const
Element operator.
Definition: diagonal_matrix.h:189
Matrix< Diagonal, Ref, Ref, AT > & init(const AT &val=AT())
Initialization.
Definition: diagonal_matrix.h:337
Matrix< Diagonal, Ref, Ref, AT > & operator=(const Matrix< Type, Row, Col, AT > &A)
Assignment operator.
Definition: diagonal_matrix.h:135
Matrix()
Standard constructor.
Definition: diagonal_matrix.h:71
const AT & operator()(int i, int j) const
Element operator.
Definition: diagonal_matrix.h:175
Matrix(const Matrix< Type, Row, Col, AT > &A)
Copy Constructor.
Definition: diagonal_matrix.h:98
This is the basic matrix class for arbitrary matrices.
Definition: matrix.h:52
int rows() const
Number of rows.
int cols() const
Number of columns.
Namespace fmatvec.
Definition: _memory.cc:28