maliput
|
A third-order Runge Kutta integrator with a third order error estimate.
For a discussion of this Runge-Kutta method, see [Butcher, 1987]. The embedded error estimate was derived using the method mentioned in [Hairer, 1993].
The Butcher tableau for this integrator follows:
| 0 | 1/2 | 1/2 1 | -1 2 --------------------------------------------------------------------------- 1/6 2/3 1/6 0 1 0
where the second to last row is the 3rd-order propagated solution and the last row is the 2nd-order midpoint used for the error estimate.
The following documentation is pulled from Simbody's implementation of this integrator: "This is a 3-stage, first-same-as-last (FSAL) 3rd order method which gives us an embedded 2nd order method as well, so we can extract a 3rd-order error estimate for the 2nd-order result, which error estimate can then be used for step size control, since it will behave as h^3. We then propagate the 3rd order result (whose error is unknown), which Hairer calls 'local extrapolation'. We call the initial state (t0,y0) and want (t0+h,y1). We are given the initial derivative f0=f(t0,y0), which most likely is left over from an evaluation at the end of the last step."
@tparam_nonsymbolic_scalar
#include <src/maliput/drake/systems/analysis/runge_kutta3_integrator.h>
Public Member Functions | |
~RungeKutta3Integrator () override=default | |
RungeKutta3Integrator (const System< T > &system, Context< T > *context=nullptr) | |
bool | supports_error_estimation () const override |
The integrator supports error estimation. More... | |
int | get_error_estimate_order () const override |
This integrator provides third order error estimates. More... | |
Public Member Functions inherited from IntegratorBase< T > | |
IntegratorBase (const System< T > &system, Context< T > *context=nullptr) | |
Maintains references to the system being integrated and the context used to specify the initial conditions for that system (if any). More... | |
virtual | ~IntegratorBase ()=default |
void | set_target_accuracy (double accuracy) |
Request that the integrator attempt to achieve a particular accuracy for the continuous portions of the simulation. More... | |
double | get_target_accuracy () const |
Gets the target accuracy. More... | |
double | get_accuracy_in_use () const |
Gets the accuracy in use by the integrator. More... | |
const ContinuousState< T > * | get_error_estimate () const |
Gets the error estimate (used only for integrators that support error estimation). More... | |
const T & | get_ideal_next_step_size () const |
Return the step size the integrator would like to take next, based primarily on the integrator's accuracy prediction. More... | |
void | set_fixed_step_mode (bool flag) |
Sets an integrator with error control to fixed step mode. More... | |
bool | get_fixed_step_mode () const |
Gets whether an integrator is running in fixed step mode. More... | |
const Eigen::VectorXd & | get_generalized_state_weight_vector () const |
Gets the weighting vector (equivalent to a diagonal matrix) applied to weighting both generalized coordinate and velocity state variable errors, as described in the group documentation. More... | |
Eigen::VectorBlock< Eigen::VectorXd > | get_mutable_generalized_state_weight_vector () |
Gets a mutable weighting vector (equivalent to a diagonal matrix) applied to weighting both generalized coordinate and velocity state variable errors, as described in the group documentation. More... | |
const Eigen::VectorXd & | get_misc_state_weight_vector () const |
Gets the weighting vector (equivalent to a diagonal matrix) for weighting errors in miscellaneous continuous state variables z . More... | |
Eigen::VectorBlock< Eigen::VectorXd > | get_mutable_misc_state_weight_vector () |
Gets a mutable weighting vector (equivalent to a diagonal matrix) for weighting errors in miscellaneous continuous state variables z . More... | |
void | request_initial_step_size_target (const T &step_size) |
Request that the first attempted integration step have a particular size. More... | |
const T & | get_initial_step_size_target () const |
Gets the target size of the first integration step. More... | |
void | set_maximum_step_size (const T &max_step_size) |
Sets the maximum step size that may be taken by this integrator. More... | |
const T & | get_maximum_step_size () const |
Gets the maximum step size that may be taken by this integrator. More... | |
double | get_stretch_factor () const |
Gets the stretch factor (> 1), which is multiplied by the maximum (typically user-designated) integration step size to obtain the amount that the integrator is able to stretch the maximum time step toward hitting an upcoming publish or update event in IntegrateNoFurtherThanTime(). More... | |
void | set_requested_minimum_step_size (const T &min_step_size) |
Sets the requested minimum step size h_min that may be taken by this integrator. More... | |
const T & | get_requested_minimum_step_size () const |
Gets the requested minimum step size h_min for this integrator. More... | |
void | set_throw_on_minimum_step_size_violation (bool throws) |
Sets whether the integrator should throw a std::exception when the integrator's step size selection algorithm determines that it must take a step smaller than the minimum step size (for, e.g., purposes of error control). More... | |
bool | get_throw_on_minimum_step_size_violation () const |
Reports the current setting of the throw_on_minimum_step_size_violation flag. More... | |
T | get_working_minimum_step_size () const |
Gets the current value of the working minimum step size h_work(t) for this integrator, which may vary with the current time t as stored in the integrator's context. More... | |
void | Reset () |
Resets the integrator to initial values, i.e., default construction values. More... | |
void | Initialize () |
An integrator must be initialized before being used. More... | |
StepResult | IntegrateNoFurtherThanTime (const T &publish_time, const T &update_time, const T &boundary_time) |
(Internal use only) Integrates the system forward in time by a single step with step size subject to integration error tolerances (assuming that the integrator supports error estimation). More... | |
void | IntegrateWithMultipleStepsToTime (const T &t_final) |
Stepping function for integrators operating outside of Simulator that advances the continuous state exactly to t_final . More... | |
bool | IntegrateWithSingleFixedStepToTime (const T &t_target) |
Stepping function for integrators operating outside of Simulator that advances the continuous state using a single step to t_target . More... | |
void | ResetStatistics () |
Forget accumulated statistics. More... | |
int64_t | get_num_substep_failures () const |
Gets the number of failed sub-steps (implying one or more step size reductions was required to permit solving the necessary nonlinear system of equations). More... | |
int64_t | get_num_step_shrinkages_from_substep_failures () const |
Gets the number of step size shrinkages due to sub-step failures (e.g., integrator convergence failures) since the last call to ResetStatistics() or Initialize(). More... | |
int64_t | get_num_step_shrinkages_from_error_control () const |
Gets the number of step size shrinkages due to failure to meet targeted error tolerances, since the last call to ResetStatistics or Initialize(). More... | |
int64_t | get_num_derivative_evaluations () const |
Returns the number of ODE function evaluations (calls to CalcTimeDerivatives()) since the last call to ResetStatistics() or Initialize(). More... | |
const T & | get_actual_initial_step_size_taken () const |
The actual size of the successful first step. More... | |
const T & | get_smallest_adapted_step_size_taken () const |
The size of the smallest step taken as the result of a controlled integration step adjustment since the last Initialize() or ResetStatistics() call. More... | |
const T & | get_largest_step_size_taken () const |
The size of the largest step taken since the last Initialize() or ResetStatistics() call. More... | |
int64_t | get_num_steps_taken () const |
The number of integration steps taken since the last Initialize() or ResetStatistics() call. More... | |
void | add_derivative_evaluations (double evals) |
Manually increments the statistic for the number of ODE evaluations. More... | |
const Context< T > & | get_context () const |
Returns a const reference to the internally-maintained Context holding the most recent state in the trajectory. More... | |
Context< T > * | get_mutable_context () |
Returns a mutable pointer to the internally-maintained Context holding the most recent state in the trajectory. More... | |
void | reset_context (Context< T > *context) |
Replace the pointer to the internally-maintained Context with a different one. More... | |
void | StartDenseIntegration () |
Starts dense integration, allocating a new dense output for this integrator to use. More... | |
const trajectories::PiecewisePolynomial< T > * | get_dense_output () const |
Returns a const pointer to the integrator's current PiecewisePolynomial instance, holding a representation of the continuous state trajectory since the last StartDenseIntegration() call. More... | |
std::unique_ptr< trajectories::PiecewisePolynomial< T > > | StopDenseIntegration () |
Stops dense integration, yielding ownership of the current dense output to the caller. More... | |
const System< T > & | get_system () const |
Gets a constant reference to the system that is being integrated (and was provided to the constructor of the integrator). More... | |
bool | is_initialized () const |
Indicates whether the integrator has been initialized. More... | |
const T & | get_previous_integration_step_size () const |
Gets the size of the last (previous) integration step. More... | |
Additional Inherited Members | |
Public Types inherited from IntegratorBase< T > | |
enum | StepResult { kReachedPublishTime = 1, kReachedZeroCrossing = 2, kReachedUpdateTime = 3, kTimeHasAdvanced = 4, kReachedBoundaryTime = 5, kReachedStepLimit = 6 } |
Status returned by IntegrateNoFurtherThanTime(). More... | |
Protected Member Functions inherited from IntegratorBase< T > | |
virtual void | DoResetStatistics () |
Resets any statistics particular to a specific integrator. More... | |
const ContinuousState< T > & | EvalTimeDerivatives (const Context< T > &context) |
Evaluates the derivative function and updates call statistics. More... | |
template<typename U > | |
const ContinuousState< U > & | EvalTimeDerivatives (const System< U > &system, const Context< U > &context) |
Evaluates the derivative function (and updates call statistics). More... | |
void | set_accuracy_in_use (double accuracy) |
Sets the working ("in use") accuracy for this integrator. More... | |
bool | StepOnceErrorControlledAtMost (const T &h_max) |
Default code for advancing the continuous state of the system by a single step of h_max (or smaller, depending on error control). More... | |
T | CalcStateChangeNorm (const ContinuousState< T > &dx_state) const |
Computes the infinity norm of a change in continuous state. More... | |
std::pair< bool, T > | CalcAdjustedStepSize (const T &err, const T &attempted_step_size, bool *at_minimum_step_size) const |
Calculates adjusted integrator step sizes toward keeping state variables within error bounds on the next integration step. More... | |
virtual void | DoReset () |
Derived classes can override this method to perform routines when Reset() is called. More... | |
trajectories::PiecewisePolynomial< T > * | get_mutable_dense_output () |
Returns a mutable pointer to the internally-maintained PiecewisePolynomial instance, holding a representation of the continuous state trajectory since the last time StartDenseIntegration() was called. More... | |
bool | DoDenseStep (const T &h) |
Calls DoStep(h) while recording the resulting step in the dense output. More... | |
ContinuousState< T > * | get_mutable_error_estimate () |
Gets an error estimate of the state variables recorded by the last call to StepOnceFixedSize(). More... | |
void | set_actual_initial_step_size_taken (const T &h) |
void | set_smallest_adapted_step_size_taken (const T &h) |
Sets the size of the smallest-step-taken statistic as the result of a controlled integration step adjustment. More... | |
void | set_largest_step_size_taken (const T &h) |
void | set_ideal_next_step_size (const T &h) |
|
overridedefault |
|
explicit |
|
overridevirtual |
This integrator provides third order error estimates.
Implements IntegratorBase< T >.
|
overridevirtual |
The integrator supports error estimation.
Implements IntegratorBase< T >.