3#include "math/eigen_interface.h"
5#include "math/systems/discretization.h"
16template <
int STATES,
int INPUTS,
int OUTPUTS>
19 using MatrixA = EMat<STATES, STATES>;
20 using MatrixB = EMat<STATES, INPUTS>;
21 using MatrixC = EMat<OUTPUTS, STATES>;
22 using MatrixD = EMat<OUTPUTS, INPUTS>;
24 using VectorX = EVec<STATES>;
25 using VectorU = EVec<INPUTS>;
26 using VectorY = EVec<OUTPUTS>;
36 LinearSystem(
const MatrixA &
A,
const MatrixB &
B,
const MatrixC &
C,
const MatrixD &
D) : m_Ac(
A), m_Bc(
B), m_C(
C), m_D(
D) {}
41 MatrixA
A() {
return m_Ac; }
46 MatrixB
B() {
return m_Bc; }
51 const std::tuple<std::tuple<MatrixA, MatrixB>> &
discAB(
const double &dt) {
return discretize_AB(m_Ac, m_Bc, dt); }
56 MatrixC
C() {
return m_C; }
61 MatrixD
D() {
return m_D; }
73 VectorX
compute_X(
const VectorX &x,
const VectorU &u,
double dt) {
75 auto [Ad, Bd] = discretize_AB(m_Ac, m_Bc, dt);
77 return Ad * x + Bd * u;
88 VectorY
compute_Y(
const VectorX &x,
const VectorU &u) {
89 return m_C * x + m_D * u;
VectorX compute_X(const VectorX &x, const VectorU &u, double dt)
Definition linear_system.h:73
MatrixB B()
Definition linear_system.h:46
const std::tuple< std::tuple< MatrixA, MatrixB > > & discAB(const double &dt)
Definition linear_system.h:51
LinearSystem(const MatrixA &A, const MatrixB &B, const MatrixC &C, const MatrixD &D)
Definition linear_system.h:36
MatrixC C()
Definition linear_system.h:56
MatrixD D()
Definition linear_system.h:61
MatrixA A()
Definition linear_system.h:41
VectorY compute_Y(const VectorX &x, const VectorU &u)
Definition linear_system.h:88