10template <
typename T, my_
size_t Rows, my_
size_t Cols>
28#ifdef DEBUG_FUSED_MATRIX
37#ifdef DEBUG_FUSED_MATRIX
46#ifdef DEBUG_FUSED_MATRIX
55#ifdef DEBUG_FUSED_MATRIX
63#ifdef DEBUG_FUSED_MATRIX
71 (*this)(i, j) = initList[i][j];
80#ifdef DEBUG_FUSED_MATRIX
89#ifdef DEBUG_FUSED_MATRIX
99#ifdef DEBUG_FUSED_MATRIX
108 template <
typename Expr>
111#ifdef DEBUG_FUSED_MATRIX
122#ifdef DEBUG_FUSED_MATRIX
132#ifdef DEBUG_FUSED_MATRIX
147#ifdef DEBUG_FUSED_MATRIX
157#ifdef DEBUG_FUSED_MATRIX
167#ifdef DEBUG_FUSED_MATRIX
175 (*this)(i, j) = initList[i][j];
254 template <
typename LeftExpr,
typename RightExpr>
360 for (
my_size_t i = 1; i < matrix_size; i++)
373 for (
my_size_t i = 1; i < matrix_size; i++)
377 (*this)(i, j) = T(0);
399 for (
my_size_t i = 0; i < matrix_size; i++)
401 for (
my_size_t j = i + 1; j < matrix_size; j++)
412 for (
my_size_t i = 0; i < matrix_size; i++)
414 for (
my_size_t j = i + 1; j < matrix_size; j++)
416 (*this)(i, j) = T(0);
452 MyErrorHandler::error(
"FusedMatrix is non-invertible cause: diagonal element is zero (Gauss Elimination)");
455 T tmp = _temp(i, j) / _temp(j, j);
459 _temp(i, k) -= (_temp(j, k) * tmp);
460 _outp(i, k) -= (_outp(j, k) * tmp);
477 for (
int i = j - 1; i >= 0; i--)
485 T tmp = _temp(i, j) / _temp(j, j);
486 _temp(i, j) -= (_temp(j, j) * tmp);
490 for (
int k = rows - 1; k >= 0; k--)
492 _outp(i, k) -= (_outp(j, k) * tmp);
505 MyErrorHandler::error(
"FusedMatrix is non-invertible cause: diagonal element is zero (Normalization)");
509 _temp(i, i) = T(1.0);
528 if (!ident.isIdentity())
534 if (!ident1.isIdentity())
557 if (strict.has_value())
566 if (relaxed.has_value())
Cholesky decomposition for symmetric positive-definite matrices.
static void log(const T &msg, ErrorLevel level=ErrorLevel::Plain)
Definition error_handler.h:18
static void error(const T &msg)
Definition error_handler.h:30
Definition fused_matrix.h:12
bool isSymmetric(void) const
Definition fused_matrix.h:292
FusedMatrix & setDiagonal(T _val)
Definition fused_matrix.h:224
const T & operator()(my_size_t i, my_size_t j) const
Definition fused_matrix.h:188
FusedMatrix & setIdentity(void)
Definition fused_matrix.h:234
FusedMatrix(const FusedMatrix &other)
Definition fused_matrix.h:25
FusedTensorND< T, Rows, Cols > copyToTensor(void) const
Definition fused_matrix.h:87
FusedMatrix(const FusedTensorND< T, Rows, Cols > &baseTensor)
Definition fused_matrix.h:34
FusedMatrix & operator=(FusedTensorND< T, Rows, Cols > &&other) noexcept
Definition fused_matrix.h:145
FusedMatrix(FusedMatrix &&other) noexcept
Definition fused_matrix.h:43
FusedMatrix & operator=(const FusedTensorND< T, Rows, Cols > &other)
Definition fused_matrix.h:120
bool isLowerTriangular(void) const
Definition fused_matrix.h:327
FusedMatrix(T initValue)
Definition fused_matrix.h:21
bool isOrthogonal(void)
Definition fused_matrix.h:519
FusedMatrix lowerTriangular(bool inplace=false)
Definition fused_matrix.h:384
FusedMatrix & setToZero(void)
Definition fused_matrix.h:194
FusedMatrix & setSequencial(void)
Definition fused_matrix.h:244
FusedMatrix & operator=(const BaseExpr< Expr > &expr)
Definition fused_matrix.h:109
FusedMatrix & operator=(FusedMatrix< T, Rows, Cols > &&other) noexcept
Definition fused_matrix.h:155
FusedMatrix & setRandom(my_size_t _maxRand, my_size_t _minRand)
Definition fused_matrix.h:214
FusedMatrix(FusedTensorND< T, Rows, Cols > &&baseTensor) noexcept
Definition fused_matrix.h:52
static constexpr FusedMatrix moveFromTensor(FusedTensorND< T, Rows, Cols > &&tensor)
Definition fused_matrix.h:78
FusedMatrix()
Definition fused_matrix.h:17
FusedMatrix & operator=(const FusedMatrix &other)
Definition fused_matrix.h:130
FusedMatrix & setHomogen(T _val)
Definition fused_matrix.h:204
FusedTensorND< T, Rows, Cols > moveToTensor(void)
Definition fused_matrix.h:97
bool isIdentity(void) const
Definition fused_matrix.h:260
FusedMatrix(T(&initList)[Rows][Cols])
Definition fused_matrix.h:61
FusedMatrix & operator=(T(&initList)[Rows][Cols])
Definition fused_matrix.h:165
static FusedMatrix< T, Rows, Cols > matmul(const BaseExpr< LeftExpr > &mat1, const BaseExpr< RightExpr > &mat2)
Definition fused_matrix.h:255
matrix_traits::Definiteness isPositiveDefinite() const
Determine if the matrix is positive definite, semi-definite, or neither.
Definition fused_matrix.h:553
T & operator()(my_size_t i, my_size_t j)
Definition fused_matrix.h:183
FusedMatrix inverse(void) const
Definition fused_matrix.h:424
DEFINE_TYPE_ALIAS(T, value_type)
bool isUpperTriangular(void) const
Definition fused_matrix.h:307
FusedMatrix upperTriangular(bool inplace=false)
Definition fused_matrix.h:345
Definition fused_tensor.h:31
FusedTensorND & setSequencial(void)
Definition fused_tensor.h:428
FusedTensorND & setIdentity(void)
Definition fused_tensor.h:408
FORCE_INLINE auto transpose_view() const noexcept
Definition fused_tensor.h:304
FusedTensorND & setDiagonal(T _val)
Definition fused_tensor.h:383
FusedTensorND & setToZero(void) noexcept
Definition fused_tensor.h:347
T & operator()(Indices... indices) TESSERACT_CONDITIONAL_NOEXCEPT
Definition fused_tensor.h:206
FusedTensorND & setHomogen(T _val) noexcept
Definition fused_tensor.h:355
FusedTensorND & operator=(const BaseExpr< Expr > &expr)
Definition fused_tensor.h:95
static constexpr bool areDimsEqual()
Definition fused_tensor.h:246
static FORCE_INLINE constexpr my_size_t getDim(my_size_t i) TESSERACT_CONDITIONAL_NOEXCEPT
Definition fused_tensor.h:804
T value_type
Definition fused_tensor.h:37
FusedTensorND & setRandom(T _maxRand, T _minRand)
Definition fused_tensor.h:363
static FusedTensorND einsum(const BaseExpr< LeftExpr > &_tensor1, const BaseExpr< RightExpr > &_tensor2, const my_size_t a, const my_size_t b)
Contract two tensors along specified axes using SIMD dot products.
Definition fused_tensor.h:484
#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.
constexpr T abs(T x) noexcept
Compute the absolute value of a numeric value.
Definition math_utils.h:48
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.
constexpr remove_reference_t< T > && move(T &&t) noexcept
Cast to rvalue reference (replacement for std::move).
Definition simple_type_traits.h:178