template<typename T, int num_stages = 2>
class drake::systems::RadauIntegrator< T, num_stages >
A selectable order (third- or first-order), fully implicit integrator with error estimation.
- Template Parameters
-
T | The scalar type, which must be one of the default nonsymbolic scalars. |
num_stages | The number of stages used in this integrator, which must be either 1 or 2. Set this to 1 for the integrator to be implicit Euler and 2 for it to Radau3 (default). |
A two-stage Radau IIa (see [Hairer, 1996], Ch. 5) method is used for propagating the state forward, by default. The state can also be propagated using a single-stage method, in which case it is equivalent to an implicit Euler method, by setting num_stages=1. Regardless of the order of propagating state, the local (truncation) error is estimated through the implicit trapezoid rule.
Radau IIa methods are known to be L-Stable, meaning both that applying it at a fixed integration step to the "test" equation y(t) = eᵏᵗ
yields zero (for k < 0
and t → ∞
) and that it is also A-Stable. A-Stability, in turn, means that the method can integrate the linear constant coefficient system dx/dt = Ax
at any step size without the solution becoming unstable (growing without bound). The practical effect of L-Stability is that the integrator tends to be stable for any given step size on an arbitrary system of ordinary differential equations. Note that the implicit trapezoid rule used for error estimation is "only" A-Stable; whether this lesser stability has some practical effect on the efficiency of this integrator is currently unknown. See [Lambert, 1991], Ch. 6 for an approachable discussion on stiff differential equations and L- and A-Stability.
This implementation uses Newton-Raphson (NR). General implementation details were taken from [Hairer, 1996] Ch. 8.
- [Hairer, 1996] E. Hairer and G. Wanner. Solving Ordinary Differential Equations II (Stiff and Differential-Algebraic Problems). Springer, 1996.
- [Lambert, 1991] J. D. Lambert. Numerical Methods for Ordinary Differential Equations. John Wiley & Sons, 1991.
- See also
- ImplicitIntegrator class documentation for information about implicit integration methods in general.
-
Radau3Integrator and Radau1Integrator alises for third- and first-order Template MetaProgramming with num_stages already specified.
- Note
- This integrator uses the integrator accuracy setting, even when run in fixed-step mode, to limit the error in the underlying Newton-Raphson process. See IntegratorBase::set_target_accuracy() for more info.
|
| RadauIntegrator (const System< T > &system, Context< T > *context=nullptr) |
|
| ~RadauIntegrator () final=default |
|
bool | supports_error_estimation () const final |
| Derived classes must override this function to indicate whether the integrator supports error estimation. More...
|
|
int | get_error_estimate_order () const final |
| This integrator uses embedded second order methods to compute estimates of the local truncation error. More...
|
|
|
| RadauIntegrator (const RadauIntegrator &)=delete |
|
RadauIntegrator & | operator= (const RadauIntegrator &)=delete |
|
| RadauIntegrator (RadauIntegrator &&)=delete |
|
RadauIntegrator & | operator= (RadauIntegrator &&)=delete |
|
virtual | ~ImplicitIntegrator () |
|
| ImplicitIntegrator (const System< T > &system, Context< T > *context=nullptr) |
|
int | max_newton_raphson_iterations () const |
| The maximum number of Newton-Raphson iterations to take before the Newton-Raphson process decides that convergence will not be attained. More...
|
|
void | set_reuse (bool reuse) |
| Sets whether the integrator attempts to reuse Jacobian matrices and iteration matrix factorizations (default is true ). More...
|
|
bool | get_reuse () const |
| Gets whether the integrator attempts to reuse Jacobian matrices and iteration matrix factorizations. More...
|
|
void | set_use_full_newton (bool flag) |
| Sets whether the method operates in "full Newton" mode, in which case Jacobian and iteration matrices are freshly computed on every Newton-Raphson iteration. More...
|
|
bool | get_use_full_newton () const |
| Gets whether this method is operating in "full Newton" mode. More...
|
|
void | set_jacobian_computation_scheme (JacobianComputationScheme scheme) |
| Sets the Jacobian computation scheme. More...
|
|
JacobianComputationScheme | get_jacobian_computation_scheme () const |
|
int64_t | get_num_derivative_evaluations_for_jacobian () const |
| Gets the number of ODE function evaluations (calls to EvalTimeDerivatives()) used only for computing the Jacobian matrices since the last call to ResetStatistics(). More...
|
|
int64_t | get_num_jacobian_evaluations () const |
| Gets the number of Jacobian computations (i.e., the number of times that the Jacobian matrix was reformed) since the last call to ResetStatistics(). More...
|
|
int64_t | get_num_newton_raphson_iterations () const |
| Gets the number of iterations used in the Newton-Raphson nonlinear systems of equation solving process since the last call to ResetStatistics(). More...
|
|
int64_t | get_num_iteration_matrix_factorizations () const |
| Gets the number of factorizations of the iteration matrix since the last call to ResetStatistics(). More...
|
|
int64_t | get_num_error_estimator_derivative_evaluations () const |
| Gets the number of ODE function evaluations (calls to EvalTimeDerivatives()) used only for the error estimation process since the last call to ResetStatistics(). More...
|
|
int64_t | get_num_error_estimator_derivative_evaluations_for_jacobian () const |
|
int64_t | get_num_error_estimator_newton_raphson_iterations () const |
| Gets the number of iterations used in the Newton-Raphson nonlinear systems of equation solving process for the error estimation process since the last call to ResetStatistics(). More...
|
|
int64_t | get_num_error_estimator_jacobian_evaluations () const |
| Gets the number of Jacobian matrix computations used only during the error estimation process since the last call to ResetStatistics(). More...
|
|
int64_t | get_num_error_estimator_iteration_matrix_factorizations () const |
| Gets the number of factorizations of the iteration matrix used only during the error estimation process since the last call to ResetStatistics(). More...
|
|
| 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 | JacobianComputationScheme { kForwardDifference,
kCentralDifference,
kAutomatic
} |
|
enum | StepResult {
kReachedPublishTime = 1,
kReachedZeroCrossing = 2,
kReachedUpdateTime = 3,
kTimeHasAdvanced = 4,
kReachedBoundaryTime = 5,
kReachedStepLimit = 6
} |
| Status returned by IntegrateNoFurtherThanTime(). More...
|
|
enum | ConvergenceStatus { kDiverged,
kConverged,
kNotConverged
} |
|
virtual int | do_max_newton_raphson_iterations () const |
| Derived classes can override this method to change the number of Newton-Raphson iterations (10 by default) to take before the Newton-Raphson process decides that convergence will not be attained. More...
|
|
bool | MaybeFreshenMatrices (const T &t, const VectorX< T > &xt, const T &h, int trial, const std::function< void(const MatrixX< T > &J, const T &h, typename ImplicitIntegrator< T >::IterationMatrix *)> &compute_and_factor_iteration_matrix, typename ImplicitIntegrator< T >::IterationMatrix *iteration_matrix) |
| Computes necessary matrices (Jacobian and iteration matrix) for Newton-Raphson (NR) iterations, as necessary. More...
|
|
void | FreshenMatricesIfFullNewton (const T &t, const VectorX< T > &xt, const T &h, const std::function< void(const MatrixX< T > &J, const T &h, typename ImplicitIntegrator< T >::IterationMatrix *)> &compute_and_factor_iteration_matrix, typename ImplicitIntegrator< T >::IterationMatrix *iteration_matrix) |
| Computes necessary matrices (Jacobian and iteration matrix) for full Newton-Raphson (NR) iterations, if full Newton-Raphson method is activated (if it's not activated, this method is a no-op). More...
|
|
bool | IsUpdateZero (const VectorX< T > &xc, const VectorX< T > &dxc, double eps=-1.0) const |
| Checks whether a proposed update is effectively zero, indicating that the Newton-Raphson process converged. More...
|
|
ConvergenceStatus | CheckNewtonConvergence (int iteration, const VectorX< T > &xtplus, const VectorX< T > &dx, const T &dx_norm, const T &last_dx_norm) const |
| Checks a Newton-Raphson iteration process for convergence. More...
|
|
virtual void | DoImplicitIntegratorReset () |
| Derived classes can override this method to perform routines when Reset() is called. More...
|
|
bool | IsBadJacobian (const MatrixX< T > &J) const |
| Checks to see whether a Jacobian matrix is "bad" (has any NaN or Inf values) and needs to be recomputed. More...
|
|
MatrixX< T > & | get_mutable_jacobian () |
|
void | DoResetStatistics () override |
| Resets any statistics particular to a specific integrator. More...
|
|
void | DoReset () final |
| Derived classes can override this method to perform routines when Reset() is called. More...
|
|
const MatrixX< T > & | CalcJacobian (const T &t, const VectorX< T > &x) |
|
void | ComputeForwardDiffJacobian (const System< T > &system, const T &t, const VectorX< T > &xt, Context< T > *context, MatrixX< T > *J) |
|
void | ComputeCentralDiffJacobian (const System< T > &system, const T &t, const VectorX< T > &xt, Context< T > *context, MatrixX< T > *J) |
|
void | ComputeAutoDiffJacobian (const System< T > &system, const T &t, const VectorX< T > &xt, const Context< T > &context, MatrixX< T > *J) |
|
void | increment_num_iter_factorizations () |
|
void | increment_jacobian_computation_derivative_evaluations (int count) |
|
void | increment_jacobian_evaluations () |
|
void | set_jacobian_is_fresh (bool flag) |
|
template<> |
void | ComputeAutoDiffJacobian (const System< AutoDiffXd > &, const AutoDiffXd &, const VectorX< AutoDiffXd > &, const Context< AutoDiffXd > &, MatrixX< AutoDiffXd > *) |
|
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...
|
|
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) |
|