template<class T>
class drake::systems::RungeKutta3Integrator< T >
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."
- [Butcher, 1987] J. C. Butcher. The Numerical Analysis of Ordinary Differential Equations. John Wiley & Sons, 1987. p. 325.
- [Hairer, 1993] E. Hairer, S. Noersett, and G. Wanner. Solving ODEs I. 2nd rev. ed. Springer, 1993. p. 166.
- Template Parameters
-
|
| ~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...
|
|
|
| RungeKutta3Integrator (const RungeKutta3Integrator &)=delete |
|
RungeKutta3Integrator & | operator= (const RungeKutta3Integrator &)=delete |
|
| RungeKutta3Integrator (RungeKutta3Integrator &&)=delete |
|
RungeKutta3Integrator & | operator= (RungeKutta3Integrator &&)=delete |
|
| 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 | 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...
|
|
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...
|
|
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...
|
|
| IntegratorBase (const IntegratorBase &)=delete |
|
IntegratorBase & | operator= (const IntegratorBase &)=delete |
|
| IntegratorBase (IntegratorBase &&)=delete |
|
IntegratorBase & | operator= (IntegratorBase &&)=delete |
|
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 | 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...
|
|
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...
|
|
|
enum | StepResult {
kReachedPublishTime = 1,
kReachedZeroCrossing = 2,
kReachedUpdateTime = 3,
kTimeHasAdvanced = 4,
kReachedBoundaryTime = 5,
kReachedStepLimit = 6
} |
| Status returned by IntegrateNoFurtherThanTime(). More...
|
|
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) |
|