64 template<
class ValueType,
int states>
71 Eigen::Matrix<ValueType, states+1, states+1> M;
76 M.template block<states, states>(0, 0) = sys.
A();
77 M.col(states).head(states) = sys.
B().col(0);
78 M.row(states).setZero();
85 result.
A() = Md.template block<states, states>(0, 0);
86 result.
B().col(0) = Md.col(states).head(states);
120 template<
class T,
int NStates,
int NInputs,
int NOutputs>
125 const Eigen::Matrix<T, NStates, NStates> I = Eigen::Matrix<T, NStates, NStates>::Identity();
126 const Eigen::Matrix<T, NStates, NStates> M = (I - (sample_time /
static_cast<T
>(2)) * sys.
A()).eval();
127 const Eigen::Matrix<T, NStates, NStates> P = (I + (sample_time /
static_cast<T
>(2)) * sys.
A()).eval();
129 Eigen::PartialPivLU<Eigen::Matrix<T, NStates, NStates>> Mfactor(M);
131 const Eigen::Matrix<T, NStates, NStates> A_d = Mfactor.solve(P);
132 const Eigen::Matrix<T, NStates, NInputs> B_d = Mfactor.solve(sample_time * sys.
B());
133 const Eigen::Matrix<T, NOutputs, NStates> C_d = M.transpose().partialPivLu().solve(sys.
C().transpose()).transpose();
134 const Eigen::Matrix<T, NOutputs, NInputs> X = (sys.
C() * Mfactor.solve(sys.
B() * (sample_time /
static_cast<T
>(2))));
135 const Eigen::Matrix<T, NOutputs, NInputs> D_d = (sys.
D() + X);
142 template<
class T,
int NStates>
145 const T& sample_time,
Definition ContinuousStateSpace.hpp:10
A_matrix_type & A()
Definition ContinuousStateSpace.hpp:55
D_matrix_type & D()
Definition ContinuousStateSpace.hpp:58
B_matrix_type & B()
Definition ContinuousStateSpace.hpp:56
C_matrix_type & C()
Definition ContinuousStateSpace.hpp:57
Matrix (A, B, C, D) representation of a linear time invariant system.
Definition DiscreteStateSpace.hpp:41
C_matrix_type & C()
Definition DiscreteStateSpace.hpp:108
D_matrix_type & D()
Definition DiscreteStateSpace.hpp:109
B_matrix_type & B()
Definition DiscreteStateSpace.hpp:107
A_matrix_type & A()
Definition DiscreteStateSpace.hpp:106
Includes functions for matrix exponentiation.
The main namespace for the Control++ library.
Definition Bode.cpp:3
Eigen::Matrix< T, N, N > expm(const Eigen::Matrix< T, N, N, Options, MaxRows, MaxCols > &M)
Calculates the matrix exponent .
Definition expm.hpp:275
DiscreteStateSpace< T, NStates, 1, 1 > discretise(const ContinuousStateSpace< T, NStates, 1, 1 > &sys, const T &sample_time, EDiscretisation method)
Definition transformations.hpp:143
DiscreteStateSpace< T, NStates, NInputs, NOutputs > discretise_tustin(const ContinuousStateSpace< T, NStates, NInputs, NOutputs > &sys, const T &sample_time)
discretises a continuous state space to a discrete one with the Tustin transformation
Definition transformations.hpp:121
EDiscretisation
Definition transformations.hpp:22
DiscreteStateSpace< ValueType, states, 1, 1 > discretise_zoh(const ContinuousStateSpace< ValueType, states, 1, 1 > &sys, ValueType sample_time)
transform s-domain into z-domain using zero-order-hold
Definition transformations.hpp:65