akreon-control
Optimal and robust control and state estimation in C++26.
Loading...
Searching...
No Matches
control Namespace Reference

Classes

struct  H2PolytopicStateFeedback
 H2 Polytopic State Feedback. More...
 
struct  H2PolytopicStateObserver
 H2 Polytopic State Observer. More...
 
struct  H2StateFeedback
 H2 State Feedback. More...
 
struct  H2StateObserver
 H2 State Observer. More...
 
struct  HinfPolytopicStateFeedback
 Hinf Polytopic State Feedback. More...
 
struct  HinfPolytopicStateObserver
 Hinf Polytopic State Observer. More...
 
struct  HinfStateFeedback
 Hinf State Feedback. More...
 
struct  HinfStateObserver
 Hinf State Observer. More...
 
struct  LuenbergerObserver
 Luenberger Observer. More...
 
struct  plant_traits
 base type traits for plant model More...
 
struct  plant_traits< PlantModel< SS, InputPortsT, OutputPortsT > >
 explicit type traits for plant model More...
 
struct  PlantModel
 Forward declaration of PlantModel. More...
 
struct  PolytopicObserver
 Polytopic Luenberger Observer. More...
 
struct  PolytopicStateFeedback
 PolytopicStateFeedback. More...
 
struct  Port
 Port specification. More...
 
struct  PortLayout
 Port layout over either the state-space input or output axis. More...
 
struct  ss_traits
 base type traits for state space More...
 
struct  ss_traits< StateSpace< Type, PlantIn, ControlIn, OutputIn > >
 explicit type traits for state space More...
 
struct  StateFeedback
 StateFeedback. More...
 
struct  StateSpace
 forward decl of state space More...
 

Concepts

concept  PortLike
 
concept  StateSpaceLike
 StateSpace concept.
 
concept  ContinuousStateSpaceLike
 ContinuousStateSpace concept.
 
concept  DiscreteStateSpaceLike
 ContinuousStateSpace concept.
 
concept  PlantModelLike
 PlantModel concept.
 
concept  ContinuousPlantModelLike
 ContinuousPlantModel concept.
 
concept  DiscretePlantModelLike
 DiscretePlantModel concept.
 

Typedefs

template<typename StateSpace >
using ss_type_t = typename ss_traits< linalg::remove_cvref_t< StateSpace > >::T
 extract scalar type from ss
 
template<typename StateSpace >
using ss_plant_t = typename ss_traits< linalg::remove_cvref_t< StateSpace > >::Plant
 ss plant type
 
template<typename StateSpace >
using ss_control_t = typename ss_traits< linalg::remove_cvref_t< StateSpace > >::Control
 ss control type
 
template<typename StateSpace >
using ss_output_t = typename ss_traits< linalg::remove_cvref_t< StateSpace > >::Output
 ss output type
 
template<typename StateSpace >
using state_vec_t = typename ss_traits< linalg::remove_cvref_t< StateSpace > >::State
 extract state vector
 
template<typename StateSpace >
using input_vec_t = typename ss_traits< linalg::remove_cvref_t< StateSpace > >::Input
 extract input vector
 
template<typename StateSpace >
using output_vec_t = typename ss_traits< linalg::remove_cvref_t< StateSpace > >::OutVec
 extract output vector
 
template<typename Plant >
using plant_type_t = typename plant_traits< linalg::remove_cvref_t< Plant > >::T
 extract scalar type from plant
 
template<typename Plant >
using plant_state_space_t = typename plant_traits< linalg::remove_cvref_t< Plant > >::StateSpace
 extract state-space type from plant
 
template<typename Plant >
using plant_input_ports_t = typename plant_traits< linalg::remove_cvref_t< Plant > >::InputPorts
 extract input port layout type from plant
 
template<typename Plant >
using plant_output_ports_t = typename plant_traits< linalg::remove_cvref_t< Plant > >::OutputPorts
 extract output port layout type from plant
 
template<typename Plant >
using plant_state_vec_t = typename plant_traits< linalg::remove_cvref_t< Plant > >::State
 extract state vector from plant
 
template<typename Plant >
using plant_input_vec_t = typename plant_traits< linalg::remove_cvref_t< Plant > >::Input
 extract full input vector from plant
 
template<typename Plant >
using plant_output_vec_t = typename plant_traits< linalg::remove_cvref_t< Plant > >::Output
 extract full output vector from plant
 

Enumerations

enum struct  PortRole : uint8_t { EXOGENOUS , CONTROL , PERFORMANCE , MEASUREMENT }
 Plant port role. More...
 
enum struct  TimeDomainType : uint8_t { CONTINUOUS = 0 , DISCRETE }
 time domain type More...
 

Functions

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike DecVar>
constexpr auto make_h2_polytopic_state_observer_problem (const linalg::Vector< Plant, N > &poly, const DecVar &Z_hat, plant_type_t< Plant > margin=1e-6)
 make polytopic state observer
 
template<ContinuousPlantModelLike ObsModel, convex::AtomLike DecVar>
constexpr auto make_h2_state_observer_problem (const ObsModel &model, const DecVar &Z_hat, plant_type_t< ObsModel > margin=1e-6)
 make h2 state observer problem
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike DecVar>
constexpr auto make_hinf_polytopic_state_observer_problem (const linalg::Vector< Plant, N > &poly, const DecVar &Z_hat, plant_type_t< Plant > margin=1e-6)
 make polytopic Hinf state observer
 
template<ContinuousPlantModelLike ObsModel, convex::AtomLike DecVar>
constexpr auto make_hinf_state_observer_problem (const ObsModel &model, const DecVar &Z_hat, plant_type_t< ObsModel > margin=1e-6)
 make hinf state observer problem
 
template<ContinuousPlantModelLike ObsModel, convex::AtomLike ZVar>
constexpr auto make_observer_problem (const ObsModel &model, const ZVar &Z, const auto &obj, plant_type_t< ObsModel > margin=1e-6)
 make observer problem
 
template<ContinuousPlantModelLike ObsModel, convex::AtomLike ZVar>
constexpr auto make_observer_problem (const ObsModel &model, const ZVar &Z, plant_type_t< ObsModel > margin=1e-6)
 make observer problem
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto make_polytopic_observer_quadratic_objective (const linalg::Matrix< plant_type_t< Plant >, PolytopicObserver< Plant, N >::ZDim, PolytopicObserver< Plant, N >::ZDim > &P, const linalg::Vector< plant_type_t< Plant >, PolytopicObserver< Plant, N >::ZDim > &q, const ZVar &Z)
 make quadratic objective over merged PLDI variable
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto make_polytopic_observer_problem (const linalg::Vector< Plant, N > &poly, const ZVar &Z, const auto &obj, plant_type_t< Plant > margin=1e-6)
 make PLDI problem with objective
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto make_polytopic_observer_problem (const linalg::Vector< Plant, N > &poly, const ZVar &Z, plant_type_t< Plant > margin=1e-6)
 make PLDI feasibility problem
 
template<linalg::SquareMatrix PMat, linalg::MatrixContainer YMat>
constexpr auto recover_state_feedback_gain (const PMat &P, const YMat &Y)
 recover state-feedback gain from a lifted gain variable
 
template<linalg::SquareMatrix QMat, linalg::MatrixContainer WMat>
constexpr auto recover_state_observer_gain (const QMat &Q, const WMat &W)
 recover state-observer gain from a lifted gain variable
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike DecVar>
constexpr auto make_h2_polytopic_state_feedback_problem (const linalg::Vector< Plant, N > &poly, const DecVar &Z_hat, plant_type_t< Plant > margin=1e-6)
 make polytopic H2
 
template<ContinuousPlantModelLike SFModel, convex::AtomLike DecVar>
constexpr auto make_h2_state_feedback_problem (const SFModel &model, const DecVar &Z_hat, plant_type_t< SFModel > margin=1e-6)
 make h2 state feedback problem
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike DecVar>
constexpr auto make_hinf_polytopic_state_feedback_problem (const linalg::Vector< Plant, N > &poly, const DecVar &Z_hat, plant_type_t< Plant > margin=1e-6)
 make polytopic Hinf state feedback
 
template<ContinuousPlantModelLike SFModel, convex::AtomLike DecVar>
constexpr auto make_hinf_state_feedback_problem (const SFModel &model, const DecVar &Z_hat, plant_type_t< SFModel > margin=1e-6)
 make hinf state feedback problem
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto make_polytopic_state_feedback_linear_objective (const linalg::Vector< plant_type_t< Plant >, PolytopicStateFeedback< Plant, N >::PDim > &p_weights, const linalg::Vector< plant_type_t< Plant >, PolytopicStateFeedback< Plant, N >::YDim > &y_weights, const ZVar &Z)
 make linear objective over merged PLDI variable
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto make_polytopic_state_feedback_quadratic_objective (const linalg::Matrix< plant_type_t< Plant >, PolytopicStateFeedback< Plant, N >::ZDim, PolytopicStateFeedback< Plant, N >::ZDim > &P, const linalg::Vector< plant_type_t< Plant >, PolytopicStateFeedback< Plant, N >::ZDim > &q, const ZVar &Z)
 make quadratic objective over merged PLDI variable
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto make_polytopic_state_feedback_problem (const linalg::Vector< Plant, N > &poly, const ZVar &Z, const auto &obj, plant_type_t< Plant > margin=1e-6)
 make PLDI problem with objective
 
template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto make_polytopic_state_feedback_problem (const linalg::Vector< Plant, N > &poly, const ZVar &Z, plant_type_t< Plant > margin=1e-6)
 make PLDI feasibility problem
 
template<ContinuousPlantModelLike SFModel, convex::AtomLike ZVar>
constexpr auto make_state_feedback_problem (const SFModel &model, const ZVar &Z, const auto &obj, plant_type_t< SFModel > margin=1e-6)
 make state feedback problem
 
template<ContinuousPlantModelLike SFModel, convex::AtomLike ZVar>
constexpr auto make_state_feedback_problem (const SFModel &model, const ZVar &Z, plant_type_t< SFModel > margin=1e-6)
 make state feedback feasibility problem
 
template<ContinuousStateSpaceLike SS>
requires linalg::Real<ss_type_t<SS>>
constexpr auto c2d_zoh (const SS &continuous, ss_type_t< SS > dt)
 Convert a real continuous state-space model using zero-order hold.
 

Variables

template<typename StateSpace >
constexpr bool is_continuous_v
 check if continuous or not
 
template<typename Plant >
constexpr bool plant_is_continuous_v
 check if plant model is continuous
 

Typedef Documentation

◆ input_vec_t

template<typename StateSpace >
using control::input_vec_t = typedef typename ss_traits<linalg::remove_cvref_t<StateSpace> >::Input

extract input vector

Definition at line 165 of file control_traits.hpp.

◆ output_vec_t

template<typename StateSpace >
using control::output_vec_t = typedef typename ss_traits<linalg::remove_cvref_t<StateSpace> >::OutVec

extract output vector

Definition at line 170 of file control_traits.hpp.

◆ plant_input_ports_t

template<typename Plant >
using control::plant_input_ports_t = typedef typename plant_traits<linalg::remove_cvref_t<Plant> >::InputPorts

extract input port layout type from plant

Definition at line 244 of file control_traits.hpp.

◆ plant_input_vec_t

template<typename Plant >
using control::plant_input_vec_t = typedef typename plant_traits<linalg::remove_cvref_t<Plant> >::Input

extract full input vector from plant

Definition at line 259 of file control_traits.hpp.

◆ plant_output_ports_t

template<typename Plant >
using control::plant_output_ports_t = typedef typename plant_traits<linalg::remove_cvref_t<Plant> >::OutputPorts

extract output port layout type from plant

Definition at line 249 of file control_traits.hpp.

◆ plant_output_vec_t

template<typename Plant >
using control::plant_output_vec_t = typedef typename plant_traits<linalg::remove_cvref_t<Plant> >::Output

extract full output vector from plant

Definition at line 264 of file control_traits.hpp.

◆ plant_state_space_t

template<typename Plant >
using control::plant_state_space_t = typedef typename plant_traits<linalg::remove_cvref_t<Plant> >::StateSpace

extract state-space type from plant

Definition at line 239 of file control_traits.hpp.

◆ plant_state_vec_t

template<typename Plant >
using control::plant_state_vec_t = typedef typename plant_traits<linalg::remove_cvref_t<Plant> >::State

extract state vector from plant

Definition at line 254 of file control_traits.hpp.

◆ plant_type_t

template<typename Plant >
using control::plant_type_t = typedef typename plant_traits<linalg::remove_cvref_t<Plant> >::T

extract scalar type from plant

Definition at line 235 of file control_traits.hpp.

◆ ss_control_t

template<typename StateSpace >
using control::ss_control_t = typedef typename ss_traits<linalg::remove_cvref_t<StateSpace> >::Control

ss control type

Definition at line 150 of file control_traits.hpp.

◆ ss_output_t

template<typename StateSpace >
using control::ss_output_t = typedef typename ss_traits<linalg::remove_cvref_t<StateSpace> >::Output

ss output type

Definition at line 155 of file control_traits.hpp.

◆ ss_plant_t

template<typename StateSpace >
using control::ss_plant_t = typedef typename ss_traits<linalg::remove_cvref_t<StateSpace> >::Plant

ss plant type

Definition at line 145 of file control_traits.hpp.

◆ ss_type_t

template<typename StateSpace >
using control::ss_type_t = typedef typename ss_traits<linalg::remove_cvref_t<StateSpace> >::T

extract scalar type from ss

Definition at line 141 of file control_traits.hpp.

◆ state_vec_t

template<typename StateSpace >
using control::state_vec_t = typedef typename ss_traits<linalg::remove_cvref_t<StateSpace> >::State

extract state vector

Definition at line 160 of file control_traits.hpp.

Enumeration Type Documentation

◆ PortRole

Plant port role.

Enumerator
EXOGENOUS 

w: disturbance, reference, noise, or other external input

CONTROL 

u: controller input to the plant

PERFORMANCE 

z: regulated/performance output

MEASUREMENT 

y: measured output available for feedback/estimation

Definition at line 17 of file control_traits.hpp.

◆ TimeDomainType

time domain type

Enumerator
CONTINUOUS 
DISCRETE 

Definition at line 113 of file control_traits.hpp.

Function Documentation

◆ c2d_zoh()

template<ContinuousStateSpaceLike SS>
requires linalg::Real<ss_type_t<SS>>
constexpr auto control::c2d_zoh ( const SS &  continuous,
ss_type_t< SS >  dt 
)
constexpr

Convert a real continuous state-space model using zero-order hold.

For xdot = A*x + B*u, hold u(t) = u_k over [k*dt, (k+1)*dt). Integrating the dynamics gives x_(k+1) = Ad*x_k + Bd*u_k, where Ad = exp(A*dt), Bd = integral_0^dt exp(A*tau)*B d(tau). Compute both through exp(dt * [A B; 0 0]) = [Ad Bd; 0 I], avoiding an inverse of A so integrators and other singular A are supported. For y = C*x + D*u, sampled outputs retain Cd = C and Dd = D; an absent D remains absent. Inputs are held constant over each sample interval; dt is in the same time units as the continuous dynamics. The returned StateSpace does not store dt. Accuracy follows linalg::matrix_exp's generalized-eigenvector algorithm.

Exceptions
std::invalid_argumentNonfinite model or nonpositive/nonfinite dt.
std::runtime_errorNonfinite, nonreal, or structurally invalid matrix exponential (including its zero-matrix failure sentinel).

Definition at line 38 of file discretization.hpp.

References is_continuous_v.

◆ make_h2_polytopic_state_feedback_problem()

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike DecVar>
constexpr auto control::make_h2_polytopic_state_feedback_problem ( const linalg::Vector< Plant, N > &  poly,
const DecVar &  Z_hat,
plant_type_t< Plant >  margin = 1e-6 
)
constexpr

make polytopic H2

Parameters
poly(Polytope of plant models)
Z_hat(dec var)
margin(PDness
Returns
H2 problem

Definition at line 131 of file h2_polytopic_state_feedback.hpp.

References is_continuous_v.

◆ make_h2_polytopic_state_observer_problem()

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike DecVar>
constexpr auto control::make_h2_polytopic_state_observer_problem ( const linalg::Vector< Plant, N > &  poly,
const DecVar &  Z_hat,
plant_type_t< Plant >  margin = 1e-6 
)
constexpr

make polytopic state observer

Parameters
poly(Polytope of plant models)
Z_hat(Dec Var)
margin(for PD)
Returns
convex problem

Definition at line 132 of file h2_polytopic_state_observer.hpp.

References is_continuous_v.

◆ make_h2_state_feedback_problem()

template<ContinuousPlantModelLike SFModel, convex::AtomLike DecVar>
constexpr auto control::make_h2_state_feedback_problem ( const SFModel &  model,
const DecVar &  Z_hat,
plant_type_t< SFModel >  margin = 1e-6 
)
constexpr

make h2 state feedback problem

Parameters
model(PlantModel)
Z(DecVar)
margin(PSD Margin)
Returns
h2 state feedback problem

Definition at line 282 of file h2_state_feedback.hpp.

References is_continuous_v.

◆ make_h2_state_observer_problem()

template<ContinuousPlantModelLike ObsModel, convex::AtomLike DecVar>
constexpr auto control::make_h2_state_observer_problem ( const ObsModel &  model,
const DecVar &  Z_hat,
plant_type_t< ObsModel >  margin = 1e-6 
)
constexpr

make h2 state observer problem

Parameters
model(PlantModel)
Z(DecVar)
margin(PSD Margin)
Returns
h2 state observer problem

Definition at line 290 of file h2_state_observer.hpp.

References is_continuous_v.

◆ make_hinf_polytopic_state_feedback_problem()

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike DecVar>
constexpr auto control::make_hinf_polytopic_state_feedback_problem ( const linalg::Vector< Plant, N > &  poly,
const DecVar &  Z_hat,
plant_type_t< Plant >  margin = 1e-6 
)
constexpr

make polytopic Hinf state feedback

Parameters
poly(Polytope of plant models)
Z_hat(dec var)
margin(PDness)
Returns
Hinf problem

Definition at line 131 of file hinf_polytopic_state_feedback.hpp.

References is_continuous_v.

◆ make_hinf_polytopic_state_observer_problem()

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike DecVar>
constexpr auto control::make_hinf_polytopic_state_observer_problem ( const linalg::Vector< Plant, N > &  poly,
const DecVar &  Z_hat,
plant_type_t< Plant >  margin = 1e-6 
)
constexpr

make polytopic Hinf state observer

Parameters
poly(Polytope of plant models)
Z_hat(dec var)
margin(for PD)
Returns
Hinf problem

Definition at line 131 of file hinf_polytopic_state_observer.hpp.

References is_continuous_v.

◆ make_hinf_state_feedback_problem()

template<ContinuousPlantModelLike SFModel, convex::AtomLike DecVar>
constexpr auto control::make_hinf_state_feedback_problem ( const SFModel &  model,
const DecVar &  Z_hat,
plant_type_t< SFModel >  margin = 1e-6 
)
constexpr

make hinf state feedback problem

Parameters
model(PlantModel)
Z_hat(DecVar)
margin(PSD margin)
Returns
hinf state feedback problem

Definition at line 321 of file hinf_state_feedback.hpp.

References is_continuous_v.

◆ make_hinf_state_observer_problem()

template<ContinuousPlantModelLike ObsModel, convex::AtomLike DecVar>
constexpr auto control::make_hinf_state_observer_problem ( const ObsModel &  model,
const DecVar &  Z_hat,
plant_type_t< ObsModel >  margin = 1e-6 
)
constexpr

make hinf state observer problem

Parameters
model(PlantModel)
Z_hat(DecVar)
margin(PSD margin)
Returns
hinf state observer problem

Definition at line 304 of file hinf_state_observer.hpp.

References is_continuous_v.

◆ make_observer_problem() [1/2]

template<ContinuousPlantModelLike ObsModel, convex::AtomLike ZVar>
constexpr auto control::make_observer_problem ( const ObsModel &  model,
const ZVar &  Z,
const auto &  obj,
plant_type_t< ObsModel >  margin = 1e-6 
)
constexpr

make observer problem

Parameters
model(StateSpace)
Q(Var)
obj(Objective)
margin(PSD margin)
Returns
observer problem

Definition at line 185 of file luenberger_observer.hpp.

References is_continuous_v.

◆ make_observer_problem() [2/2]

template<ContinuousPlantModelLike ObsModel, convex::AtomLike ZVar>
constexpr auto control::make_observer_problem ( const ObsModel &  model,
const ZVar &  Z,
plant_type_t< ObsModel >  margin = 1e-6 
)
constexpr

make observer problem

Parameters
model(StateSpace)
Q(Var)
margin(PSD margin)
Returns
observer problem

Definition at line 206 of file luenberger_observer.hpp.

References is_continuous_v.

◆ make_polytopic_observer_problem() [1/2]

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto control::make_polytopic_observer_problem ( const linalg::Vector< Plant, N > &  poly,
const ZVar &  Z,
const auto &  obj,
plant_type_t< Plant >  margin = 1e-6 
)
constexpr

make PLDI problem with objective

Parameters
polypolytope vertices
Zmerged decision var [svec(Q); vec(W)]
objobjective atom over merged var
marginPSD margin on Q block
Returns
PLDI optimization problem

Definition at line 215 of file polytopic_observer.hpp.

References is_continuous_v.

◆ make_polytopic_observer_problem() [2/2]

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto control::make_polytopic_observer_problem ( const linalg::Vector< Plant, N > &  poly,
const ZVar &  Z,
plant_type_t< Plant >  margin = 1e-6 
)
constexpr

make PLDI feasibility problem

Parameters
polypolytope vertices
Zmerged decision var [svec(Q); vec(W)]
marginPSD margin on Q block
Returns
PLDI feasibility problem

Definition at line 232 of file polytopic_observer.hpp.

References is_continuous_v.

◆ make_polytopic_observer_quadratic_objective()

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto control::make_polytopic_observer_quadratic_objective ( const linalg::Matrix< plant_type_t< Plant >, PolytopicObserver< Plant, N >::ZDim, PolytopicObserver< Plant, N >::ZDim > &  P,
const linalg::Vector< plant_type_t< Plant >, PolytopicObserver< Plant, N >::ZDim > &  q,
const ZVar &  Z 
)
constexpr

make quadratic objective over merged PLDI variable

obj(z) = 0.5 z^T P z + q^T z

Parameters
Pquadratic weight over merged z
qlinear weight over merged z
Zmerged decision var
Returns
quadratic objective atom

Definition at line 195 of file polytopic_observer.hpp.

References is_continuous_v.

◆ make_polytopic_state_feedback_linear_objective()

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto control::make_polytopic_state_feedback_linear_objective ( const linalg::Vector< plant_type_t< Plant >, PolytopicStateFeedback< Plant, N >::PDim > &  p_weights,
const linalg::Vector< plant_type_t< Plant >, PolytopicStateFeedback< Plant, N >::YDim > &  y_weights,
const ZVar &  Z 
)
constexpr

make linear objective over merged PLDI variable

obj(z) = p_w^T svec(P) + y_w^T vec(Y)

Parameters
p_weightsweights over svec(P)
y_weightsweights over vec(Y)
Zmerged decision var
Returns
linear objective atom

Definition at line 131 of file polytopic_state_feedback.hpp.

References is_continuous_v.

◆ make_polytopic_state_feedback_problem() [1/2]

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto control::make_polytopic_state_feedback_problem ( const linalg::Vector< Plant, N > &  poly,
const ZVar &  Z,
const auto &  obj,
plant_type_t< Plant >  margin = 1e-6 
)
constexpr

make PLDI problem with objective

Parameters
polypolytope vertices
Zmerged decision var [svec(P); vec(Y)]
objobjective atom over merged var
marginPSD margin on P block
Returns
PLDI optimization problem

Definition at line 180 of file polytopic_state_feedback.hpp.

References is_continuous_v.

◆ make_polytopic_state_feedback_problem() [2/2]

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto control::make_polytopic_state_feedback_problem ( const linalg::Vector< Plant, N > &  poly,
const ZVar &  Z,
plant_type_t< Plant >  margin = 1e-6 
)
constexpr

make PLDI feasibility problem

Parameters
polypolytope vertices
Zmerged decision var [svec(P); vec(Y)]
marginPSD margin on P block
Returns
PLDI feasibility problem

Definition at line 197 of file polytopic_state_feedback.hpp.

References is_continuous_v.

◆ make_polytopic_state_feedback_quadratic_objective()

template<ContinuousPlantModelLike Plant, std::size_t N, convex::AtomLike ZVar>
constexpr auto control::make_polytopic_state_feedback_quadratic_objective ( const linalg::Matrix< plant_type_t< Plant >, PolytopicStateFeedback< Plant, N >::ZDim, PolytopicStateFeedback< Plant, N >::ZDim > &  P,
const linalg::Vector< plant_type_t< Plant >, PolytopicStateFeedback< Plant, N >::ZDim > &  q,
const ZVar &  Z 
)
constexpr

make quadratic objective over merged PLDI variable

obj(z) = 0.5 z^T P z + q^T z

Parameters
Pquadratic weight over merged z
qlinear weight over merged z
Zmerged decision var
Returns
quadratic objective atom

Definition at line 159 of file polytopic_state_feedback.hpp.

References is_continuous_v.

◆ make_state_feedback_problem() [1/2]

template<ContinuousPlantModelLike SFModel, convex::AtomLike ZVar>
constexpr auto control::make_state_feedback_problem ( const SFModel &  model,
const ZVar &  Z,
const auto &  obj,
plant_type_t< SFModel >  margin = 1e-6 
)
constexpr

make state feedback problem

Parameters
model(StateSpace)
Z(merged decision var [svec(P); vec(Y)])
obj(objective)
margin(PSD margin)
Returns
state feedback problem

Definition at line 190 of file state_feedback.hpp.

References is_continuous_v.

◆ make_state_feedback_problem() [2/2]

template<ContinuousPlantModelLike SFModel, convex::AtomLike ZVar>
constexpr auto control::make_state_feedback_problem ( const SFModel &  model,
const ZVar &  Z,
plant_type_t< SFModel >  margin = 1e-6 
)
constexpr

make state feedback feasibility problem

Parameters
model(StateSpace)
Z(merged decision var [svec(P); vec(Y)])
margin(PSD margin)
Returns
state feedback feasibility problem

Definition at line 209 of file state_feedback.hpp.

References is_continuous_v.

◆ recover_state_feedback_gain()

template<linalg::SquareMatrix PMat, linalg::MatrixContainer YMat>
constexpr auto control::recover_state_feedback_gain ( const PMat &  P,
const YMat &  Y 
)
constexpr

recover state-feedback gain from a lifted gain variable

For standard state feedback and H2 state feedback, the lifted variable has the same form:

Y = K P K = Y P^{-1}

Parameters
Psymmetric positive-definite controllability Gramian block
Ylifted feedback product
Returns
tuple(K, numerical event)

Definition at line 27 of file gain_recovery.hpp.

References is_continuous_v.

Referenced by control::StateFeedback< SFModel >::K(), control::H2StateFeedback< SFModel >::K(), and control::HinfStateFeedback< SFModel >::K().

◆ recover_state_observer_gain()

template<linalg::SquareMatrix QMat, linalg::MatrixContainer WMat>
constexpr auto control::recover_state_observer_gain ( const QMat &  Q,
const WMat &  W 
)
constexpr

recover state-observer gain from a lifted gain variable

For H2 state observers, the lifted variable has the form:

W = Q L L = Q^{-1} W

Parameters
Qsymmetric positive-definite observability Gramian block
Wlifted observer product
Returns
tuple(L, numerical event)

Definition at line 57 of file gain_recovery.hpp.

References is_continuous_v.

Referenced by control::H2StateObserver< ObsModel >::L(), control::HinfStateObserver< ObsModel >::L(), and control::LuenbergerObserver< ObsModel >::L().

Variable Documentation

◆ is_continuous_v

template<typename StateSpace >
constexpr bool control::is_continuous_v
inlineconstexpr
Initial value:
=
ss_traits<linalg::remove_cvref_t<StateSpace>>::DType ==
TimeDomainType::CONTINUOUS

check if continuous or not

Definition at line 175 of file control_traits.hpp.

Referenced by control::H2StateObserver< ObsModel >::apply(), control::HinfStateObserver< ObsModel >::apply(), control::LuenbergerObserver< ObsModel >::apply(), control::H2PolytopicStateObserver< Plant, N >::apply(), control::HinfPolytopicStateObserver< Plant, N >::apply(), control::H2PolytopicStateFeedback< Plant, N >::apply(), control::HinfPolytopicStateFeedback< Plant, N >::apply(), control::PolytopicObserver< Plant, N >::apply(), control::PolytopicStateFeedback< Plant, N >::apply(), control::H2StateFeedback< SFModel >::apply(), control::HinfStateFeedback< SFModel >::apply(), control::StateFeedback< SFModel >::apply(), control::HinfStateObserver< ObsModel >::brl_constraint(), control::HinfStateFeedback< SFModel >::brl_constraint(), c2d_zoh(), control::PlantModel< SS, InputPorts, OutputPorts >::control_matrix(), control::PlantModel< SS, InputPorts, OutputPorts >::exogenous_matrix(), control::PlantModel< SS, InputPorts, OutputPorts >::feedthrough(), control::PolytopicStateFeedback< Plant, N >::K(), control::StateFeedback< SFModel >::K(), control::H2PolytopicStateFeedback< Plant, N >::K(), control::H2StateFeedback< SFModel >::K(), control::HinfPolytopicStateFeedback< Plant, N >::K(), control::HinfStateFeedback< SFModel >::K(), control::H2PolytopicStateObserver< Plant, N >::L(), control::H2StateObserver< ObsModel >::L(), control::HinfPolytopicStateObserver< Plant, N >::L(), control::HinfStateObserver< ObsModel >::L(), control::LuenbergerObserver< ObsModel >::L(), control::PolytopicObserver< Plant, N >::L(), make_h2_polytopic_state_feedback_problem(), make_h2_polytopic_state_observer_problem(), make_h2_state_feedback_problem(), make_h2_state_observer_problem(), make_hinf_polytopic_state_feedback_problem(), make_hinf_polytopic_state_observer_problem(), make_hinf_state_feedback_problem(), make_hinf_state_observer_problem(), make_observer_problem(), make_observer_problem(), make_polytopic_observer_problem(), make_polytopic_observer_problem(), make_polytopic_observer_quadratic_objective(), make_polytopic_state_feedback_linear_objective(), make_polytopic_state_feedback_problem(), make_polytopic_state_feedback_problem(), make_polytopic_state_feedback_quadratic_objective(), make_state_feedback_problem(), make_state_feedback_problem(), control::PlantModel< SS, InputPorts, OutputPorts >::measurement_matrix(), control::H2PolytopicStateObserver< Plant, N >::objective(), control::H2StateObserver< ObsModel >::objective(), control::HinfPolytopicStateObserver< Plant, N >::objective(), control::HinfStateObserver< ObsModel >::objective(), control::H2PolytopicStateFeedback< Plant, N >::objective(), control::H2StateFeedback< SFModel >::objective(), control::HinfPolytopicStateFeedback< Plant, N >::objective(), control::HinfStateFeedback< SFModel >::objective(), control::H2StateObserver< ObsModel >::operator()(), control::HinfStateObserver< ObsModel >::operator()(), control::LuenbergerObserver< ObsModel >::operator()(), control::H2PolytopicStateObserver< Plant, N >::operator()(), control::HinfPolytopicStateObserver< Plant, N >::operator()(), control::H2PolytopicStateFeedback< Plant, N >::operator()(), control::HinfPolytopicStateFeedback< Plant, N >::operator()(), control::PolytopicObserver< Plant, N >::operator()(), control::PolytopicStateFeedback< Plant, N >::operator()(), control::H2StateFeedback< SFModel >::operator()(), control::HinfStateFeedback< SFModel >::operator()(), control::StateFeedback< SFModel >::operator()(), control::StateSpace< Type, PlantIn, ControlIn, OutputIn >::output_map(), control::StateFeedback< SFModel >::p_constraint(), control::PlantModel< SS, InputPorts, OutputPorts >::performance_matrix(), control::HinfStateObserver< ObsModel >::q_constraint(), control::HinfStateFeedback< SFModel >::q_constraint(), control::LuenbergerObserver< ObsModel >::q_constraint(), control::PolytopicObserver< Plant, N >::q_constraint(), recover_state_feedback_gain(), recover_state_observer_gain(), control::H2StateObserver< ObsModel >::stability_constraint(), control::LuenbergerObserver< ObsModel >::stability_constraint(), control::H2StateFeedback< SFModel >::stability_constraint(), control::StateFeedback< SFModel >::stability_constraint(), control::StateSpace< Type, PlantIn, ControlIn, OutputIn >::state_update(), control::PolytopicObserver< Plant, N >::vertex_constraint(), control::H2StateObserver< ObsModel >::z_constraint(), and control::H2StateFeedback< SFModel >::z_constraint().

◆ plant_is_continuous_v

template<typename Plant >
constexpr bool control::plant_is_continuous_v
inlineconstexpr
Initial value:
=
plant_traits<linalg::remove_cvref_t<Plant>>::DType ==
TimeDomainType::CONTINUOUS

check if plant model is continuous

Definition at line 280 of file control_traits.hpp.