This package provides classes to solve Ordinary Differential Equations problems.
This package solves Initial Value Problems of the form
y'=f(t,y) with t0 and
y(t0)=y0 known. The provided
integrators compute an estimate of y(t) from
t=t0 to t=t1.
It is also possible to get thederivatives with respect to the initial state
dy(t)/dy(t0) or the derivatives with
respect to some ODE parameters dy(t)/dp.
All integrators provide dense output. This means that besides
computing the state vector at discrete times, they also provide a
cheap mean to get the state between the time steps. They do so through
classes extending the StepInterpolator
abstract class, which are made available to the user at the end of
each step.
All integrators handle multiple discrete events detection based on switching functions. This means that the integrator can be driven by user specified discrete events. The steps are shortened as needed to ensure the events occur at step boundaries (even if the integrator is a fixed-step integrator). When the events are triggered, integration can be stopped (this is called a G-stop facility), the state vector can be changed, or integration can simply go on. The latter case is useful to handle discontinuities in the differential equations gracefully and get accurate dense output even close to the discontinuity.
The user should describe his problem in his own classes
(UserProblem in the diagram below) which should implement
the FirstOrderDifferentialEquations interface. Then he should pass it to
the integrator he prefers among all the classes that implement the
FirstOrderIntegrator interface.
The solution of the integration problem is provided by two means. The
first one is aimed towards simple use: the state vector at the end of
the integration process is copied in the y array of the
FirstOrderIntegrator. method. The second one should be used
when more in-depth information is needed throughout the integration
process. The user can register an object implementing the StepHandler interface or a
StepNormalizer
object wrapping a user-specified object implementing the FixedStepHandler
interface into the integrator before calling the FirstOrderIntegrator. method. The user object will be called
appropriately during the integration process, allowing the user to
process intermediate results. The default step handler does nothing.
ContinuousOutputModel is a special-purpose step handler that is able
to store all steps and to provide transparent access to any
intermediate result once the integration is over. An important feature
of this class is that it implements the Serializable
interface. This means that a complete continuous model of the
integrated function throughout the integration range can be serialized
and reused later (if stored into a persistent medium like a filesystem
or a database) or elsewhere (if sent to another application). Only the
result of the integration is stored, there is no reference to the
integrated problem by itself.
Other default implementations of the StepHandler interface are
available for general needs (DummyStepHandler, StepNormalizer) and custom
implementations can be developed for specific needs. As an example,
if an application is to be completely driven by the integration
process, then most of the application code will be run inside a step
handler specific to this application.
Some integrators (the simple ones) use fixed steps that are set at
creation time. The more efficient integrators use variable steps that
are handled internally in order to control the integration error with
respect to a specified accuracy (these integrators extend the AdaptiveStepsizeIntegrator abstract class). In this case, the step
handler which is called after each successful step shows up the
variable stepsize. The StepNormalizer class can
be used to convert the variable stepsize into a fixed stepsize that
can be handled by classes implementing the FixedStepHandler
interface. Adaptive stepsize integrators can automatically compute the
initial stepsize by themselves, however the user can specify it if he
prefers to retain full control over the integration or if the
automatic guess is wrong.
| Fixed Step Integrators | |
| Name | Order |
Euler | 1 |
Midpoint | 2 |
Classical Runge-Kutta | 4 |
Gill | 4 |
3/8 | 4 |
Luther | 6 |
| Adaptive Stepsize Integrators | ||
| Name | Integration Order | Error Estimation Order |
Higham and Hall | 5 | 4 |
Dormand-Prince 5(4) | 5 | 4 |
Dormand-Prince 8(5,3) | 8 | 5 and 3 |
Gragg-Bulirsch-Stoer | variable (up to 18 by default) | variable |
Adams-Bashforth | variable | variable |
Adams-Moulton | variable | variable |
In the table above, the Adams-Bashforth and Adams-Moulton integrators appear as variable-step ones. This is an experimental extension
to the classical algorithms using the Nordsieck vector representation.
| Modifier and Type | Interface and Description |
|---|---|
| public interface | FieldSecondaryEquations<
the type of the field elements T extends RealFieldElementThis interface allows users to add secondary differential equations to a primary set of differential equations. |
| public interface | FirstOrderDifferentialEquations
This interface represents a first order differential equations set. |
| public interface | FirstOrderFieldDifferentialEquations<
the type of the field elements T extends RealFieldElementThis interface represents a first order differential equations set. |
| public interface | FirstOrderFieldIntegrator<
the type of the field elements T extends RealFieldElementThis interface represents a first order integrator for differential equations. |
| public interface | FirstOrderIntegrator
This interface represents a first order integrator for differential equations. |
| public interface | MainStateJacobianProvider
Interface expanding |
| public interface | ODEIntegrator
This interface defines the common parts shared by integrators for first and second order differential equations. |
| public interface | Parameterizable
This interface enables to process any parameterizable object. |
| public interface | ParameterizedODE
Interface to compute by finite difference Jacobian matrix for some parameter
when computing |
| public interface | ParameterJacobianProvider
Interface to compute exactly Jacobian matrix for some parameter
when computing |
| public interface | SecondaryEquations
This interface allows users to add secondary differential equations to a primary set of differential equations. |
| public interface | SecondOrderDifferentialEquations
This interface represents a second order differential equations set. |
| public interface | SecondOrderIntegrator
This interface represents a second order integrator for differential equations. |
| Modifier and Type | Class and Description |
|---|---|
| public abstract class | AbstractFieldIntegrator<
the type of the field elements T extends RealFieldElementBase class managing common boilerplate for all integrators. |
| public abstract class | AbstractIntegrator
Base class managing common boilerplate for all integrators. |
| public abstract class | AbstractParameterizable
This abstract class provides boilerplate parameters list. |
| public class | ContinuousOutputFieldModel<
the type of the field elements T extends RealFieldElementThis class stores all information provided by an ODE integrator during the integration process and build a continuous model of the solution from this. |
| public class | ContinuousOutputModel
This class stores all information provided by an ODE integrator during the integration process and build a continuous model of the solution from this. |
| public class | EquationsMapper
Class mapping the part of a complete state or derivative that pertains to a specific differential equation. |
| public class | ExpandableStatefulODE
This class represents a combined set of first order differential equations, with at least a primary set of equations expandable by some sets of secondary equations. |
| public class | FieldEquationsMapper<
the type of the field elements T extends RealFieldElementClass mapping the part of a complete state or derivative that pertains to a set of differential equations. |
| public class | FieldExpandableODE<
the type of the field elements T extends RealFieldElementThis class represents a combined set of first order differential equations, with at least a primary set of equations expandable by some sets of secondary equations. |
| public class | FieldODEState<
the type of the field elements T extends RealFieldElementContainer for time, main and secondary state vectors. |
| public class | FieldODEStateAndDerivative<
the type of the field elements T extends RealFieldElementContainer for time, main and secondary state vectors as well as their derivatives. |
| public class | FirstOrderConverter
This class converts second order differential equations to first order ones. |
| public class | JacobianMatrices
This class defines a set of |
| public abstract class | MultistepFieldIntegrator<
the type of the field elements T extends RealFieldElementThis class is the base class for multistep integrators for Ordinary Differential Equations. |
| public abstract class | MultistepIntegrator
This class is the base class for multistep integrators for Ordinary Differential Equations. |
| pack-priv class | ParameterConfiguration
Simple container pairing a parameter name with a step in order to compute the associated Jacobian matrix by finite difference. |
| pack-priv class | ParameterizedWrapper
Wrapper class enabling |
| pack-priv class | ParameterJacobianWrapper
Wrapper class to compute Jacobian matrices by finite differences for ODE which do not compute them by themselves. |
| public class | UnknownParameterException
Exception to be thrown when a parameter is unknown. |