96 throw std::invalid_argument(
"Size mismatch between dimensions and provided values.");
109 if (
rows >= this->m_rows ||
cols >= this->m_cols)
113 return this->m_matrix[
rows * this->m_cols +
cols];
126 if (
rows >= this->m_rows ||
cols >= this->m_cols)
130 return this->m_matrix[
rows * this->m_cols +
cols];
141 return this->m_matrix +
value;
163 return this->m_matrix -
value;
185 return this->m_matrix *
value;
199 for (
int i = 0;
i < this->m_rows;
i++)
204 for (
int k = 0;
k < this->m_cols;
k++)
206 sum += this->m_matrix[
i * this->m_cols +
k]
234 return this->m_matrix /
value;
255 return this->m_matrix +
value;
266 return this->m_matrix -
value;
277 return this->m_matrix *
value;
288 return this->m_matrix /
value;
302 for (
int i{0};
i <
value.size();
i++)
304 for (
int j = 0;
j < this->m_cols;
j++)
306 result[
i] += this->m_matrix[
i * this->m_cols +
j];
322 std::pair<int, int> size =
dm_1.size();
323 return {size.first, size.second,
dm_1.matrix_add_element_wise(
dm_2)};
362 std::pair<int, int> size =
dm_1.size();
363 return {size.first, size.second,
dm_1.matrix_subtract_element_wise(
dm_2)};
406 std::pair<int, int> size =
dm_1.size();
407 return {size.first, size.second,
dm_1.matrixMultiplyElementWise(
dm_2)};
449 std::pair<int, int> size =
dm_1.size();
450 return {size.first, size.second,
dm_1.matrix_divide_element_wise(
dm_2)};
489 for (
int i = 0;
i < size.first;
i++)
491 for (
int j = 0;
j < size.second;
j++)
525 for (
int i{0};
i < this->m_rows;
i++)
527 for (
int j{0};
j < this->m_cols;
j++)
529 if (this->m_matrix[
i * this->m_cols +
j] != 0)
531 this->m_non_zero_elements.emplace_back(
i,
j);
MatrixType
Definition CoreEnums.h:33
DenseMatrix< T > operator+(const DenseMatrix< T > &dm_1, const DenseMatrix< T > &dm_2)
Overload of the binary + operator.
Definition DenseMatrix.h:320
DenseMatrix< T > operator/(const DenseMatrix< T > &dm_1, const DenseMatrix< T > &dm_2)
Overload of the binary / operator.
Definition DenseMatrix.h:447
DenseMatrix< T > operator*(const DenseMatrix< T > &dm_1, const DenseMatrix< T > &dm_2)
Overload of the binary * operator. Does matrix multiplication/matrix product.
Definition DenseMatrix.h:404
DenseMatrix< T > operator-(const DenseMatrix< T > &dm_1, const DenseMatrix< T > &dm_2)
Overload of the binary - operator.
Definition DenseMatrix.h:360
std::ostream & operator<<(std::ostream &out, const DenseMatrix< T > &dense_matrix)
Overload of the << operator.
Definition DenseMatrix.h:486
Concrete implemenatation of a matrix class representing a dense matrix. Offers basic access and eleme...
Definition DenseMatrix.h:18
DenseMatrix< T > matrixMultiply(const DenseMatrix &dense_matrix) const
Mathematical matrix multiplication of two DenseMatrix objects.
Definition DenseMatrix.h:194
std::valarray< T > matrixAddElementWise(const DenseMatrix &dense_matrix) const
Addition of two DenseMatrix objects element-wise.
Definition DenseMatrix.h:150
DenseMatrix(DenseMatrix &&)=default
DenseMatrix & operator=(DenseMatrix &&)=default
DenseMatrix & operator=(const DenseMatrix &)=default
const std::vector< std::pair< int, int > > & getNonZeroElements() override
Definition DenseMatrix.h:52
DenseMatrix(const DenseMatrix &)=default
std::valarray< T > scalarSubtract(T value) const override
Subtraction of a scalar from the matrix values element-wise.
Definition DenseMatrix.h:161
std::valarray< T > vectorElemMultiply(const std::valarray< T > &value) const override
Multiplication of a vector to the matrix values element-wise.
Definition DenseMatrix.h:275
std::valarray< T > vectorElemDivide(const std::valarray< T > &value) const override
Division of a vector from the matrix values element-wise.
Definition DenseMatrix.h:286
std::valarray< T > matrixMultiplyElementWise(const DenseMatrix &dense_matrix) const
Multiplication of two DenseMatrix objects element-wise.
Definition DenseMatrix.h:221
std::valarray< T > matrixDivideElementWise(const DenseMatrix &dense_matrix) const
Division of two DenseMatrix objects element-wise.
Definition DenseMatrix.h:243
std::valarray< T > matrixSubtractElementWise(const DenseMatrix &dense_matrix) const
Subtraction of two DenseMatrix objects element-wise.
Definition DenseMatrix.h:172
std::valarray< T > scalarMultiply(T value) const override
Multiplication of a scalar to the matrix values element-wise.
Definition DenseMatrix.h:183
std::valarray< T > vectorElemAdd(const std::valarray< T > &value) const override
Addition of a vector to the matrix values element-wise.
Definition DenseMatrix.h:253
std::valarray< T > matrixVectorMultiplication(const std::valarray< T > &value) const override
Matrix-vector-multiplication for dense matrices.
Definition DenseMatrix.h:299
~DenseMatrix() override=default
std::valarray< T > scalarAdd(T value) const override
Addition of a scalar to the matrix values element-wise.
Definition DenseMatrix.h:139
void buildAtRuntime(int rows, int cols) override
Updates row, col values and array size if creation was deferred at invocation of constructor.
Definition DenseMatrix.h:509
T & operator()(int rows, int cols) override
Parentheses operator to allow access to the matrix values as Matrix(row,column).
Definition DenseMatrix.h:107
std::valarray< T > scalarDivide(T value) const override
Division of a scalar from the matrix values element-wise.
Definition DenseMatrix.h:232
void updateNonZeroElements() override
Updates the vector containing the non-zero element row-col pairs. Used for optimization.
Definition DenseMatrix.h:523
const MatrixType getMatrixType() override
Definition DenseMatrix.h:57
DenseMatrix()
Constructor used for buildAtRuntime.
Definition DenseMatrix.h:66
std::valarray< T > vectorElemSubtract(const std::valarray< T > &value) const override
Subtraction of a vector from the matrix values element-wise.
Definition DenseMatrix.h:264
Error class to throw when a module chain has circular or missing dependencies. Inherits from std::exc...
Definition ChainManager.h:28
Template generalized Matrix object that should be the base for all further implementations of a matri...
Definition GenericMatrix.h:19
std::vector< std::pair< int, int > > m_non_zero_elements
Definition GenericMatrix.h:25
Error class to throw when the matrix is accessed out of bounds. Inherits from std::exception.
Definition GenericMatrix.h:150