9template <
typename T, my_
size_t Rows, my_
size_t Cols>
22 :
TensorND<T, Rows, Cols>(initValue) {}
30 :
TensorND<T, Rows, Cols>(baseTensor) {}
42 return Matrix(std::move(tensor));
52 (*this)(i, j) = initList[i][j];
82 (*this)(i, j) = initList[i][j];
91 template <my_
size_t Rows1, my_
size_t Cols1>
114 return matrix + scalar;
118 template <my_
size_t Rows1, my_
size_t Cols1>
141 return -matrix + scalar;
155 template <my_
size_t Rows1, my_
size_t Cols1>
178 return matrix * scalar;
182 template <my_
size_t Rows1, my_
size_t Cols1>
217 return Matrix(transposedTensor);
286 template <my_
size_t Common, my_
size_t mat1_rows, my_
size_t mat2_cols>
339 return (*
this == transposed);
401 for (
my_size_t i = 1; i < matrix_size; i++)
414 for (
my_size_t i = 1; i < matrix_size; i++)
418 (*this)(i, j) = T(0);
440 for (
my_size_t i = 0; i < matrix_size; i++)
442 for (
my_size_t j = i + 1; j < matrix_size; j++)
453 for (
my_size_t i = 0; i < matrix_size; i++)
455 for (
my_size_t j = i + 1; j < matrix_size; j++)
457 (*this)(i, j) = T(0);
493 MyErrorHandler::error(
"Matrix is non-invertible cause: diagonal element is zero (Gauss Elimination)");
496 T tmp = _temp(i, j) / _temp(j, j);
500 _temp(i, k) -= (_temp(j, k) * tmp);
501 _outp(i, k) -= (_outp(j, k) * tmp);
518 for (
int i = j - 1; i >= 0; i--)
526 T tmp = _temp(i, j) / _temp(j, j);
527 _temp(i, j) -= (_temp(j, j) * tmp);
531 for (
int k = rows - 1; k >= 0; k--)
533 _outp(i, k) -= (_outp(j, k) * tmp);
550 _temp(i, i) = T(1.0);
578 std::swap(_outp(i, k), _outp(j, k));
587 bool swapped =
false;
590 if (std::abs(_outp(i, j)) > std::abs(_outp(j, j)))
604 T pivot = _outp(j, j);
613 _outp(j, k) /= pivot;
621 T factor = _outp(i, j);
624 _outp(i, k) -= factor * _outp(j, k);
664 if (strict.has_value())
673 if (relaxed.has_value())
Cholesky decomposition for symmetric positive-definite matrices.
static void error(const T &msg)
Definition error_handler.h:30
TensorND< T, Rows, Cols > toTensor(void) const
Definition matrix.h:58
Matrix & operator=(const Matrix &other)
Definition matrix.h:65
friend Matrix operator/(const T scalar, const Matrix &matrix)
Definition matrix.h:203
matrix_traits::Definiteness isPositiveDefinite() const
Definition matrix.h:660
Matrix(const TensorND< T, Rows, Cols > &baseTensor)
Definition matrix.h:29
Matrix operator-(const T scalar) const
Definition matrix.h:129
Matrix upperTriangular(bool inplace=false)
Definition matrix.h:386
friend Matrix operator+(const T scalar, const Matrix &matrix)
Definition matrix.h:112
Matrix operator/(const Matrix< T, Rows1, Cols1 > &other) const
Definition matrix.h:183
Matrix inverse_c(void) const
Definition matrix.h:560
Matrix(const Matrix &other)
Definition matrix.h:25
Matrix & setHomogen(T _val)
Definition matrix.h:236
Matrix operator*(const Matrix< T, Rows1, Cols1 > &other) const
Definition matrix.h:156
Matrix & setSequencial(void)
Definition matrix.h:276
Matrix operator+(const T scalar) const
Definition matrix.h:102
Matrix operator+(const Matrix< T, Rows1, Cols1 > &other) const
Definition matrix.h:92
bool isOrthogonal(void)
Definition matrix.h:633
Matrix operator/(const T scalar) const
Definition matrix.h:193
DEFINE_TYPE_ALIAS(T, value_type)
Matrix(T(&initList)[Rows][Cols])
Definition matrix.h:45
bool isIdentity(void) const
Definition matrix.h:293
bool isSymmetric(void) const
Definition matrix.h:325
Matrix()
Definition matrix.h:17
Matrix & setDiagonal(T _val)
Definition matrix.h:256
friend Matrix operator*(const T scalar, const Matrix &matrix)
Definition matrix.h:176
Matrix(TensorND< T, Rows, Cols > &&baseTensor) noexcept
Definition matrix.h:37
Matrix & setToZero(void)
Definition matrix.h:226
friend Matrix operator-(const T scalar, const Matrix &matrix)
Definition matrix.h:139
static constexpr Matrix fromTensor(TensorND< T, Rows, Cols > &&tensor)
Definition matrix.h:40
Matrix(T initValue)
Definition matrix.h:21
Matrix lowerTriangular(bool inplace=false)
Definition matrix.h:425
Matrix operator-(void) const
Definition matrix.h:145
Matrix inverse(void) const
Definition matrix.h:465
bool isLowerTriangular(void) const
Definition matrix.h:364
Matrix & operator=(T(&initList)[Rows][Cols])
Definition matrix.h:75
Matrix operator-(const Matrix< T, Rows1, Cols1 > &other) const
Definition matrix.h:119
void inplace_transpose(void)
Definition matrix.h:220
Matrix(Matrix &&other) noexcept
Definition matrix.h:33
static Matrix< T, Rows, Cols > matmul(const Matrix< T, mat1_rows, Common > &mat1, const Matrix< T, Common, mat2_cols > &mat2)
Definition matrix.h:287
Matrix transposed(void) const
Definition matrix.h:211
Matrix & setRandom(my_size_t _maxRand, my_size_t _minRand)
Definition matrix.h:246
Matrix operator*(const T scalar) const
Definition matrix.h:166
Matrix & setIdentity(void)
Definition matrix.h:266
bool isUpperTriangular(void) const
Definition matrix.h:342
TensorND & setSequencial(void)
Definition tensor.h:589
friend TensorND operator-(const T scalar, const TensorND &tensor)
Definition tensor.h:213
friend TensorND operator+(const T scalar, const TensorND &tensor)
Definition tensor.h:165
void inplace_transpose(void)
Definition tensor.h:481
friend TensorND operator*(const T scalar, const TensorND &tensor)
Definition tensor.h:278
TensorND & operator=(const TensorND &other)
Definition tensor.h:136
TensorND & setRandom(my_size_t _maxRand, my_size_t _minRand)
Definition tensor.h:535
TensorND & setDiagonal(T _val)
Definition tensor.h:546
my_size_t getDim(my_size_t i) const
Definition tensor.h:830
TensorND & setToZero(void)
Definition tensor.h:523
TensorND & setIdentity(void)
Definition tensor.h:570
friend TensorND operator/(const T scalar, const TensorND &tensor)
Definition tensor.h:326
constexpr bool areDimsEqual() const
Definition tensor.h:376
static TensorND einsum(const TensorND< T, Dims1... > &_tensor1, const TensorND< T, Dims2... > &_tensor2, my_size_t a, my_size_t b)
Definition tensor.h:620
TensorND transposed(void) const
Definition tensor.h:460
TensorND & setHomogen(T _val)
Definition tensor.h:529
#define my_size_t
Size/index type used throughout the library.
Definition config.h:126
#define PRECISION_TOLERANCE
Tolerance for floating-point comparisons (e.g. symmetry checks, Cholesky).
Definition config.h:117
Runtime property descriptors and error codes for matrices.
Expected< MatrixType, MatrixStatus > cholesky(const MatrixType &A, typename MatrixType::value_type tol=typename MatrixType::value_type(PRECISION_TOLERANCE))
Compute the Cholesky decomposition of a symmetric positive-definite matrix.
Definition cholesky.h:87
Definiteness
Describes the definiteness of a symmetric matrix.
Definition matrix_traits.h:20
@ PositiveSemiDefinite
All eigenvalues ≥ 0.
@ PositiveDefinite
All eigenvalues > 0.
@ NotPositiveDefinite
Neither positive definite nor semi-definite.