40 template<
class ValueType,
int internal_states,
int inputs,
int outputs>
65 const Eigen::Matrix<ValueType, internal_states, internal_states>&
A,
66 const Eigen::Matrix<ValueType, internal_states, inputs>&
B,
67 const Eigen::Matrix<ValueType, outputs, internal_states>&
C,
68 const Eigen::Matrix<ValueType, outputs, inputs>&
D)
69 : _state_space(
A,
B,
C,
D){}
81 std::tuple<Eigen::Vector<ValueType, internal_states>, Eigen::Vector<ValueType, outputs>>
eval(
const Eigen::Vector<ValueType, internal_states>& x,
const Eigen::Vector<ValueType, inputs>& u)
const {
82 return this->_state_space.
eval(x, u);
89 template<std::convertible_to<ValueType> U>
90 requires(inputs == 1 && outputs != 1)
91 std::tuple<Eigen::Vector<U, internal_states>, Eigen::Vector<U, outputs>>
eval(
const Eigen::Vector<U, internal_states>& x,
const U& u_scalar)
const {
92 return this->_state_space.
eval(x,
static_cast<ValueType
>(u_scalar));
99 template<std::convertible_to<ValueType> U>
100 requires(inputs == 1 && outputs == 1)
101 std::tuple<Eigen::Vector<U, internal_states>, U>
eval(
const Eigen::Vector<U, internal_states>& x,
const U& u_scalar)
const {
102 return this->_state_space.
eval(x,
static_cast<ValueType
>(u_scalar));
125 template<
class T,
int NumOrder,
int DenOrder>
126 requires(NumOrder <= DenOrder)
128 static constexpr int number_of_states = DenOrder;
130 const T a_0 = rp.
den(0);
131 const T b_0 = rp.
num(0);
138 if constexpr (number_of_states > 0){
139 const auto I = Eigen::Matrix<T, number_of_states-1, number_of_states-1>::Identity();
140 result.
A().setOnes();
141 result.
A().template block<number_of_states-1, number_of_states-1>(1, 0) = I;
142 result.
A().col(number_of_states-1).tail(number_of_states-1).setZero();
147 if constexpr (number_of_states > 0){
148 result.
B()(0, 0) = T(1);
149 result.
B().col(0).tail(number_of_states-1).setZero();
153 if constexpr (number_of_states > 0){
154 Eigen::Vector<double, DenOrder> aa = a.
vector().tail(DenOrder) * b_0;
155 Eigen::Vector<double, DenOrder> bb = Eigen::Vector<double, DenOrder>::Zero();
156 bb.head(NumOrder) = b.
vector().tail(b.
size()-1);
157 result.
C().row(0) = bb + aa;
161 result.
D()(0, 0) = b_0;
168 template<
class ValueType,
int NumOrder,
int DenOrder>
176 template<
class ValueType,
int NumOrder,
int DenOrder>
Matrix (A, B, C, D) representation of a linear time invariant system.
Definition DiscreteStateSpace.hpp:41
DiscreteStateSpace(const Eigen::Matrix< ValueType, internal_states, internal_states > &A, const Eigen::Matrix< ValueType, internal_states, inputs > &B, const Eigen::Matrix< ValueType, outputs, internal_states > &C, const Eigen::Matrix< ValueType, outputs, inputs > &D)
Definition DiscreteStateSpace.hpp:64
C_matrix_type & C()
Definition DiscreteStateSpace.hpp:108
typename state_space_type::D_matrix_type D_matrix_type
Definition DiscreteStateSpace.hpp:50
D_matrix_type & D()
Definition DiscreteStateSpace.hpp:109
typename state_space_type::A_matrix_type A_matrix_type
Definition DiscreteStateSpace.hpp:47
const D_matrix_type & D() const
Definition DiscreteStateSpace.hpp:114
DiscreteStateSpace & operator=(const DiscreteStateSpace &)=default
DiscreteStateSpace(const DiscreteStateSpace &)=default
DiscreteStateSpace()=default
state_space_type & state_space()
Definition DiscreteStateSpace.hpp:75
typename state_space_type::B_matrix_type B_matrix_type
Definition DiscreteStateSpace.hpp:48
static constexpr int number_of_states
Definition DiscreteStateSpace.hpp:52
const C_matrix_type & C() const
Definition DiscreteStateSpace.hpp:113
std::tuple< Eigen::Vector< ValueType, internal_states >, Eigen::Vector< ValueType, outputs > > eval(const Eigen::Vector< ValueType, internal_states > &x, const Eigen::Vector< ValueType, inputs > &u) const
calculates the next states and calculates the output from the previous states and new inputs
Definition DiscreteStateSpace.hpp:81
std::tuple< Eigen::Vector< U, internal_states >, U > eval(const Eigen::Vector< U, internal_states > &x, const U &u_scalar) const
calculates the next states and calculates the output from the previous states and new inputs
Definition DiscreteStateSpace.hpp:101
static constexpr int number_of_outputs
Definition DiscreteStateSpace.hpp:54
ValueType value_type
Definition DiscreteStateSpace.hpp:43
DiscreteStateSpace(const state_space_type &state_space)
Definition DiscreteStateSpace.hpp:71
const state_space_type & state_space() const
Definition DiscreteStateSpace.hpp:74
std::tuple< Eigen::Vector< U, internal_states >, Eigen::Vector< U, outputs > > eval(const Eigen::Vector< U, internal_states > &x, const U &u_scalar) const
calculates the next states and calculates the output from the previous states and new inputs
Definition DiscreteStateSpace.hpp:91
static constexpr int number_of_inputs
Definition DiscreteStateSpace.hpp:53
const B_matrix_type & B() const
Definition DiscreteStateSpace.hpp:112
B_matrix_type & B()
Definition DiscreteStateSpace.hpp:107
A_matrix_type & A()
Definition DiscreteStateSpace.hpp:106
const A_matrix_type & A() const
Definition DiscreteStateSpace.hpp:111
friend std::ostream & operator<<(std::ostream &stream, const DiscreteStateSpace &dss)
Definition DiscreteStateSpace.hpp:116
typename state_space_type::C_matrix_type C_matrix_type
Definition DiscreteStateSpace.hpp:49
Continuous transfer functions in the s lapace plain.
Definition DiscreteTransferFunction.hpp:23
constexpr transfer_function_type & transfer_function()
Definition DiscreteTransferFunction.hpp:108
Describes a mathematical polynomial.
Definition Polynom.hpp:39
size_t size() const
returns the size of the polynomial
Definition Polynom.hpp:207
vector_type & vector()
Returns the underlying vector that holds the values.
Definition Polynom.hpp:198
Eigen::Matrix< ValueType, NStates, NInputs > B_matrix_type
Definition StateSpace.hpp:36
const A_matrix_type & A() const
Definition StateSpace.hpp:121
Eigen::Matrix< ValueType, NOutputs, NStates > C_matrix_type
Definition StateSpace.hpp:37
const B_matrix_type & B() const
Definition StateSpace.hpp:122
std::tuple< Eigen::Vector< T, NStates >, Eigen::Vector< T, NOutputs > > eval(const Eigen::Vector< T, NStates > &x, const Eigen::Vector< T, NInputs > &u) const
calculates the new system states and outupts
Definition StateSpace.hpp:76
const D_matrix_type & D() const
Definition StateSpace.hpp:124
Eigen::Matrix< ValueType, NOutputs, NInputs > D_matrix_type
Definition StateSpace.hpp:38
const C_matrix_type & C() const
Definition StateSpace.hpp:123
Eigen::Matrix< ValueType, NStates, NStates > A_matrix_type
Definition StateSpace.hpp:35
Definition TransferFunction.hpp:11
constexpr Polynom< T, DenOrder > & den()
returns a reference to the denominator
Definition TransferFunction.hpp:83
constexpr Polynom< T, NumOrder > & num()
returns a reference to the numerator
Definition TransferFunction.hpp:57
The main namespace for the Control++ library.
Definition Bode.cpp:3
DiscreteStateSpace< T, DenOrder, 1, 1 > to_discrete_state_space(const TransferFunction< T, NumOrder, DenOrder > &rp)
constructs a discrete state space function from a rational polynom
Definition DiscreteStateSpace.hpp:127
ContinuousStateSpace< T, DenOrder, 1, 1 > to_state_space(const ContinuousTransferFunction< T, NumOrder, DenOrder > &ctf)
constructs a continuous state space function from a continuous transfer function
Definition ContinuousStateSpace.hpp:91