14template <linalg::RnSpace Space>
18template <linalg::RnSpace Space>
22template <linalg::RnSpace Space>
32template <
typename Meta,
typename Child, linalg::SquareMatrix MatIn>
43 using Mat = linalg::remove_cvref_t<MatIn>;
44 static constexpr std::size_t
MatDim = linalg::mat_rows_v<Mat>;
45 static_assert(linalg::mat_cols_v<Mat> ==
MatDim,
46 "LMI expects square coefficient matrices");
71 for (std::size_t
i = 0;
i <
N; ++
i) res = res + (x(
i) *
A(
i));
93 template <
typename Other>
95 if (!linalg::all_equal(
B,
other.B))
return false;
96 for (std::size_t
i = 0;
i <
N; ++
i)
97 if (!linalg::all_equal(
A(
i),
other.A(
i)))
return false;
108 template <linalg::MatrixContainer Mat>
110 AK_ASSERT(
false &&
"LMI does not support transformations");
123 template <AtomType Type, conic::BuilderLike Builder>
131 linalg::mat_cols_v<
decltype(
child_coord.linear_part())>;
133 "Convex set domain does not equal the child coordinate "
134 "linear map's codomain in size");
137 linalg::Matrix<T, K, N>
F_local{};
138 linalg::Vector<T, K>
g_local{};
141 const auto m_svec = linalg::get_svec(
M);
156 const auto map = affine::AffineMap<decltype(F)>(
F,
g);
159 const auto cones = std::make_tuple(
psd_cone);
167 linalg::Vector<Mat, N>
A;
173template <
typename Mat, std::
size_t N,
typename Child>
174LMI(
const linalg::Vector<Mat, N>&,
const Mat&,
const Child&)
constexpr std::size_t dom_size_v
linalg::remove_cvref_t< T > atom_decay_t
normalize atom-facing types to a stable internal form.
Atom-local canonical emission bundle.
static constexpr std::size_t M
Codomain dimension.
ChildrenT children
Tuple of normalized child atoms.
dom_point_t< Domain > PointT
Point type accepted by the atom domain.
dom_type_t< Domain > T
Scalar field for the atom domain.
static constexpr std::size_t N
Domain dimension.
Domain wrapper with a static sign label.
forward declaration of convex set
forward declaration of LMI type
constexpr bool is_equal_impl(const Other &other) const
equality comparison
constexpr auto transform_impl(const affine::AffineMap< Mat > &) const
transform impl
constexpr auto canonicalize(const Builder &builder) const
canonicalize impl
static constexpr std::size_t MatDim
constexpr bool is_well_formed() const
is_well_formed to check if the set is valid
constexpr LMI(const linalg::Vector< Mat, N > &A_in, const Mat &B_in, const Child &child_in)
CTOR for LMI A & B split out.
linalg::Vector< Mat, N > A
member vars for LMI
constexpr bool contains_impl(const PointT &x, T) const
contains function to see if x is in the LMI defined as
linalg::remove_cvref_t< MatIn > Mat
lifted matrix for P