27template <SquareMatrix Mat,
typename Derived>
31template <SquareMatrix Mat,
typename Derived>
32struct SymmetricOperator;
35template <SquareMatrix Mat>
36struct SymmetricMatrix;
39template <SquareMatrix Mat>
43template <SquareMatrix Mat, DifferentialType Type>
47template <SquareMatrix Mat>
51template <SquareMatrix Mat,
typename Circ>
55template <SquareMatrix Mat>
59template <SquareMatrix Mat>
67 static constexpr std::size_t DIM = N * (N + 1) / 2;
71template <SquareMatrix Mat>
79 for (std::size_t row = 0, index = 0; row < N; ++row) {
80 for (std::size_t
col = 0;
col <= row; ++
col, ++index) {
91 for (std::size_t row = 0, index = 0; row < N; ++row) {
92 for (std::size_t
col = 0;
col <= row; ++
col, ++index) {
103template <SquareMatrix Mat,
typename Derived>
112template <SquareMatrix Mat,
typename Derived>
121template <SquareMatrix Mat>
130template <SquareMatrix Mat>
139template <SquareMatrix Mat, DifferentialType Type>
148template <SquareMatrix Mat>
157template <SquareMatrix Mat,
typename Circ>
166template <SquareMatrix Mat>
175template <SquareMatrix Mat,
typename Derived>
179 static constexpr std::size_t dim = N * N;
184template <SquareMatrix Mat,
typename Derived>
188 static constexpr std::size_t dim = N * (N + 1) / 2;
193template <SquareMatrix Mat>
197 static constexpr std::size_t dim = N * (N + 1) / 2;
202template <SquareMatrix Mat>
206 static constexpr std::size_t dim = N * N;
211template <SquareMatrix Mat, DifferentialType Type>
215 static constexpr std::size_t dim = N * N;
220template <SquareMatrix Mat>
224 static constexpr std::size_t dim = N * (N + 1) / 2;
229template <SquareMatrix Mat,
typename Circ>
233 static constexpr std::size_t dim = N * N;
238template <SquareMatrix Mat>
242 static constexpr std::size_t dim = N * (N + 1) / 2;
247template <
typename Space>
251template <SquareMatrix Mat>
255template <
typename Space>
259template <
class Operator>
262template <
typename T, std::
size_t Rows, std::
size_t Cols>
270template <
class Operator>
282template <
class Operator>
285template <
class Operator>
288template <
class Operator>
291template <
class Operator>
294template <
class Operator>
297template <MatrixContainer Mat>
307template <
class Operator>
311 {
apply(
op,
value) } -> std::same_as<operator_codomain_t<Operator>>;
315 {
op.apply(
value) } -> std::same_as<operator_codomain_t<Operator>>;
318template <
class Operator>
Trait-registered finite-dimensional mathematical space.
std::remove_cvref_t< T > remove_cvref_t
Remove top-level const, volatile, and reference qualification.
SymmetricOperatorType
simple enum to define symmetric matrix types INV = Invalid IND = Indefinite PSD = Positive Semidefini...
DifferentialType
differential type
typename operator_traits_t< Operator >::scalar_type operator_scalar_t
typename operator_traits_t< Operator >::domain_type operator_domain_t
constexpr std::size_t mat_rows_v
Registered compile-time row count after cv/ref normalization.
typename operator_traits_t< Operator >::codomain_type operator_codomain_t
typename space_traits< remove_cvref_t< Space > >::coordinate_type space_coordinate_t
Finite coordinate representation registered for a space.
constexpr auto apply(const Mat &matrix, const operator_domain_t< Mat > &vector) -> operator_codomain_t< Mat >
constexpr bool is_symmetric_matrix_space_v
symmetric matrix space type trait var
typename space_traits< remove_cvref_t< Space > >::scalar_type space_scalar_t
Scalar field registered for a space.
typename mat_traits< remove_cvref_t< Mat > >::value_type matrix_scalar_t
Registered matrix scalar type after cv/ref normalization.
typename operator_traits_t< Operator >::matrix_type operator_matrix_t
Factors a real positive-definite matrix as A = G G^T.
Endomorphism operator CRTP base.
Reduces A to upper Hessenberg form H = U^* A U.
Hessian as a linear operator.
Factors a real symmetric matrix as A = L D L^T without pivoting.
Owning, fixed-size, row-major matrix container over a scalar field.
forward declaration of P(x) / P(x^{-1})
forward declaration for a matrix
forward declaration for symmetric operator
Owning, fixed-size vector container.
static constexpr auto from_coordinates(const space_coordinate_t< Space > &coordinate)
static constexpr auto to_coordinates(const Mat &element)
space_scalar_t< Space > T
Customization point mapping space elements to finite coordinates.
symmetric matrix space type trait
matrix_scalar_t< Mat > value_type
matrix_scalar_t< Mat > value_type
matrix_scalar_t< Mat > value_type
matrix_scalar_t< Mat > value_type
matrix_scalar_t< Mat > value_type
matrix_scalar_t< Mat > value_type
matrix_scalar_t< Mat > value_type
matrix_scalar_t< Mat > value_type
Customization point for compile-time matrix metadata.
domain_type codomain_type
typename mat_traits< remove_cvref_t< Operator > >::MatT matrix_type
typename vector_traits< remove_cvref_t< Operator > >::Vec domain_type
typename mat_traits< remove_cvref_t< Operator > >::value_type scalar_type
matrix_scalar_t< Mat > value_type
Customization point for finite-dimensional space metadata.
matrix_scalar_t< Mat > element_type
matrix_scalar_t< Mat > element_type
matrix_scalar_t< Mat > element_type
matrix_scalar_t< Mat > element_type
matrix_scalar_t< Mat > element_type
matrix_scalar_t< Mat > element_type
matrix_scalar_t< Mat > element_type
matrix_scalar_t< Mat > element_type
Customization point for fixed-size vector metadata.