Public Types | Public Member Functions | List of all members
corbo::NumericalIntegratorExplicitInterface Class Referenceabstract

Interface for numerical integrators (explicit and implicit) More...

#include <integrator_interface.h>

Inheritance diagram for corbo::NumericalIntegratorExplicitInterface:
Inheritance graph
[legend]

Public Types

using Ptr = std::shared_ptr< NumericalIntegratorExplicitInterface >
 
using UnaryFunction = const std::function< void(const Eigen::VectorXd &, Eigen::Ref< Eigen::VectorXd >)>
 
using UPtr = std::unique_ptr< NumericalIntegratorExplicitInterface >
 
- Public Types inherited from corbo::DynamicsEvalInterface
using InputVector = Eigen::VectorXd
 
using Ptr = std::shared_ptr< DynamicsEvalInterface >
 
using StateVector = Eigen::VectorXd
 
using UPtr = std::unique_ptr< DynamicsEvalInterface >
 

Public Member Functions

void computeEqualityConstraint (const StateVector &x1, const InputVector &u1, const StateVector &x2, double dt, const SystemDynamicsInterface &system, Eigen::Ref< Eigen::VectorXd > error) override
 Compute error between two consecutive (discrete) states. More...
 
void computeEqualityConstraint (const Eigen::Ref< const Eigen::VectorXd > &x1, const Eigen::Ref< const Eigen::VectorXd > &x2, double dt, const UnaryFunction &fun, Eigen::Ref< Eigen::VectorXd > error)
 
virtual int getConvergenceOrder () const =0
 Return the convergence order. More...
 
DynamicsEvalInterface::Ptr getInstance () const override=0
 Return a newly created shared instance of the implemented class. More...
 
virtual void initialize (int state_dim)
 Allocate memory for a given state dimension. More...
 
bool interpolate (const Eigen::Ref< const Eigen::VectorXd > &x1, const Eigen::Ref< const Eigen::VectorXd > &u1, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, double dt, const SystemDynamicsInterface &system, const Range &range, std::vector< Eigen::VectorXd > &states, std::vector< Eigen::VectorXd > &controls) override
 
virtual void solveIVP (const Eigen::VectorXd &x1, double dt, const UnaryFunction &fun, Eigen::Ref< Eigen::VectorXd > x2)=0
 Solution of the initial value problem. More...
 
virtual void solveIVP (const StateVector &x1, const InputVector &u1, double dt, const SystemDynamicsInterface &system, Eigen::Ref< Eigen::VectorXd > x2)=0
 Solution of the initial value problem. More...
 
virtual ~NumericalIntegratorExplicitInterface ()
 Virtual destructor. More...
 
- Public Member Functions inherited from corbo::DynamicsEvalInterface
virtual bool interpolate (const std::vector< const Eigen::VectorXd *> &x, const std::vector< const Eigen::VectorXd *> &u, double dt, const SystemDynamicsInterface &system, const Range &range, std::vector< Eigen::VectorXd > &states, std::vector< Eigen::VectorXd > &controls)
 
virtual ~DynamicsEvalInterface ()
 Virtual destructor. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from corbo::DynamicsEvalInterface
static Factory< DynamicsEvalInterface > & getFactory ()
 Get access to the accociated factory. More...
 

Detailed Description

Interface for numerical integrators (explicit and implicit)

Explicit numerical integrators in the context of ordinary or partial differential equations determine the integral value only based on the previous or current time instance, e.g.:

\[ // * x(t_0 + \Delta t) = \int_{t_0}^{t_0+\Delta T} f(x(t_0), t) dt // * \]

.

Implicit methods require the solution of a (nonlinear) equation, since
they also depend on the solution itself:

\[ // * x(t_0 + \Delta t) = \int_{t_0}^{t_0+\Delta T} f(x(t_0+ \Delta T), x(t_0), t) dt // * \]

.

This generic interface mainly provides access to the underlying quadrature rules.
These might be used as part of an optimization or might be solved via root-finding directly.
For a direct use of integrators you might refer to the subclass NumericalIntegratorExplicitInterface.

@remark This interface is provided with factory support.

@see NumericalIntegratorExplicitInterface FiniteDifferencesInterface

@author Christoph Rösmann (christoph.roesmann@tu-dortmund.de)
Todo:
This interface is not yet completed (messages, subclasses, ...)

Allocate memory for a given state dimension

Remarks
This method is optional and not guaranteed to be called, but if so this might speed up computation.
Parameters
[in]state_dimExpected dimension of the state vector Compute equality constraint containing the implicit quadrature/interpolation formula (system dynamics specialization)

\[ // * e = \int_{t=0}^{t=\Delta T} f(x(t), u_1) dt - x_2 = 0 // * \]

.

    @param[in]  x1      Initial state vector [SystemDynamicsInterface::getStateDimension() x 1]
    @param[in]  u1      Constant control input vector [SystemDynamicsInterface::getInputDimension() x 1]
    @param[in]  x2      Final state vector [SystemDynamicsInterface::getStateDimension() x 1]
    @param[in]  dt      Time interval length
    @param[in]  system  System dynamics object
    @param[out] error   Resulting error [SystemDynamicsInterface::getStateDimension() x 1] (must be preallocated)

Compute equality constraint containing the implicit quadrature/interpolation formula (unary function specialization)

\[ // * e = \int_{t=0}^{t=\Delta T} f(x(t)) dt - x_2 = 0 // * \]

.

    @param[in]  x1      Initial function argument
    @param[in]  x2      Final function argument
    @param[in]  dt      Time interval length
    @param[in]  fun     f(x) to be integrated in the interval [0, dt]
    @param[out] error   Resulting error [SystemDynamicsInterface::getStateDimension() x 1] (must be preallocated)

Interface for explicit numerical integrators

Explicit numerical integrators in the context of ordinary or partial differential equations determine the integral value only based on the previous or current time instance, e.g.:

\[ x(t_0 + \Delta t) = \int_{t_0}^{t_0+\Delta T} f(x(t_0), t) dt \]

.

Remarks
This interface is provided with factory support (DynamicsEval).
See also
NumericalIntegratorInterface FiniteDifferencesInterface
Author
Christoph Rösmann (chris.nosp@m.toph.nosp@m..roes.nosp@m.mann.nosp@m.@tu-d.nosp@m.ortm.nosp@m.und.d.nosp@m.e)

Definition at line 158 of file integrator_interface.h.

Member Typedef Documentation

◆ Ptr

Definition at line 161 of file integrator_interface.h.

◆ UnaryFunction

using corbo::NumericalIntegratorExplicitInterface::UnaryFunction = const std::function<void(const Eigen::VectorXd&, Eigen::Ref<Eigen::VectorXd>)>

Definition at line 164 of file integrator_interface.h.

◆ UPtr

Definition at line 162 of file integrator_interface.h.

Constructor & Destructor Documentation

◆ ~NumericalIntegratorExplicitInterface()

virtual corbo::NumericalIntegratorExplicitInterface::~NumericalIntegratorExplicitInterface ( )
inlinevirtual

Virtual destructor.

Definition at line 169 of file integrator_interface.h.

Member Function Documentation

◆ computeEqualityConstraint() [1/2]

void corbo::NumericalIntegratorExplicitInterface::computeEqualityConstraint ( const StateVector x1,
const InputVector u1,
const StateVector x2,
double  dt,
const SystemDynamicsInterface system,
Eigen::Ref< Eigen::VectorXd >  error 
)
inlineoverridevirtual

Compute error between two consecutive (discrete) states.

\[ e = f(x,u,t) - \dot{x} \]

.

Remarks
We require no alias between error and all other parameters!
Parameters
[in]x1Initial state vector [SystemDynamicsInterface::getStateDimension() x 1]
[in]u1Constant control input vector [SystemDynamicsInterface::getInputDimension() x 1]
[in]x2Final state vector [SystemDynamicsInterface::getStateDimension() x 1]
[in]dtTime interval length
[in]systemSystem dynamics object
[out]errorResulting error [SystemDynamicsInterface::getStateDimension() x 1] (must be preallocated)

Implements corbo::DynamicsEvalInterface.

Definition at line 217 of file integrator_interface.h.

◆ computeEqualityConstraint() [2/2]

void corbo::NumericalIntegratorExplicitInterface::computeEqualityConstraint ( const Eigen::Ref< const Eigen::VectorXd > &  x1,
const Eigen::Ref< const Eigen::VectorXd > &  x2,
double  dt,
const UnaryFunction fun,
Eigen::Ref< Eigen::VectorXd >  error 
)
inline

Definition at line 224 of file integrator_interface.h.

◆ getConvergenceOrder()

virtual int corbo::NumericalIntegratorExplicitInterface::getConvergenceOrder ( ) const
pure virtual

◆ getInstance()

DynamicsEvalInterface::Ptr corbo::NumericalIntegratorExplicitInterface::getInstance ( ) const
overridepure virtual

◆ initialize()

virtual void corbo::NumericalIntegratorExplicitInterface::initialize ( int  state_dim)
inlinevirtual

Allocate memory for a given state dimension.

Remarks
This method is optional and not guaranteed to be called, but if so this might speed up computation.
Parameters
[in]state_dimExpected dimension of the state vector

Reimplemented in corbo::IntegratorAdaptiveStepSize, corbo::IntegratorExplicitRungeKutta7, corbo::IntegratorExplicitRungeKutta6, corbo::IntegratorExplicitRungeKutta5, corbo::IntegratorExplicitRungeKutta4, corbo::IntegratorExplicitRungeKutta3, and corbo::IntegratorExplicitRungeKutta2.

Definition at line 182 of file integrator_interface.h.

◆ interpolate()

bool corbo::NumericalIntegratorExplicitInterface::interpolate ( const Eigen::Ref< const Eigen::VectorXd > &  x1,
const Eigen::Ref< const Eigen::VectorXd > &  u1,
const Eigen::Ref< const Eigen::VectorXd > &  ,
const Eigen::Ref< const Eigen::VectorXd > &  ,
double  dt,
const SystemDynamicsInterface system,
const Range range,
std::vector< Eigen::VectorXd > &  states,
std::vector< Eigen::VectorXd > &  controls 
)
inlineoverridevirtual

Implements corbo::DynamicsEvalInterface.

Definition at line 231 of file integrator_interface.h.

◆ solveIVP() [1/2]

virtual void corbo::NumericalIntegratorExplicitInterface::solveIVP ( const Eigen::VectorXd &  x1,
double  dt,
const UnaryFunction fun,
Eigen::Ref< Eigen::VectorXd >  x2 
)
pure virtual

Solution of the initial value problem.

\[ x(t=\Delta T) = \int_{t=0}^{t=\Delta T} f(x(t)) dt \]

with $ x(t=0) = x_1 $.

Parameters
[in]x1Initial state vector [SystemDynamicsInterface::getStateDimension() x 1]
[in]u1Constant control input vector [SystemDynamicsInterface::getInputDimension() x 1]
[in]dtTime interval length
[in]systemSystem dynamics object
[out]x2Resulting state vector [SystemDynamicsInterface::getStateDimension() x 1] (must be preallocated)

Implemented in corbo::IntegratorMultiStageScaled, and corbo::IntegratorMultiStageFixedStep.

◆ solveIVP() [2/2]

virtual void corbo::NumericalIntegratorExplicitInterface::solveIVP ( const StateVector x1,
const InputVector u1,
double  dt,
const SystemDynamicsInterface system,
Eigen::Ref< Eigen::VectorXd >  x2 
)
pure virtual

The documentation for this class was generated from the following file:


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Mon Feb 28 2022 22:08:03