Class GraggBulirschStoerStepInterpolator
java.lang.Object
org.apache.commons.math3.ode.sampling.AbstractStepInterpolator
org.apache.commons.math3.ode.nonstiff.GraggBulirschStoerStepInterpolator
- All Implemented Interfaces:
Externalizable
,Serializable
,StepInterpolator
This class implements an interpolator for the Gragg-Bulirsch-Stoer
integrator.
This interpolator compute dense output inside the last step produced by a Gragg-Bulirsch-Stoer integrator.
This implementation is basically a reimplementation in Java of the odex fortran code by E. Hairer and G. Wanner. The redistribution policy for this code is available here, for convenience, it is reproduced below.
Copyright (c) 2004, Ernst Hairer |
Redistribution and use in source and binary forms, with or
without modification, are permitted provided that the following
conditions are met:
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- Since:
- 1.2
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int
Degree of the interpolation polynomials.private double[]
Error coefficients for the interpolation.private double[][]
Interpolation polynomials.private static final long
Serializable version identifier.private double[]
Slope at the beginning of the step.private double[]
State at the end of the step.private double[]
Slope at the end of the step.private double[][]
Derivatives at the middle of the step.Fields inherited from class org.apache.commons.math3.ode.sampling.AbstractStepInterpolator
currentState, h, interpolatedDerivatives, interpolatedPrimaryDerivatives, interpolatedPrimaryState, interpolatedSecondaryDerivatives, interpolatedSecondaryState, interpolatedState, interpolatedTime
-
Constructor Summary
ConstructorsConstructorDescriptionSimple constructor.GraggBulirschStoerStepInterpolator
(double[] y, double[] y0Dot, double[] y1, double[] y1Dot, double[][] yMidDots, boolean forward, EquationsMapper primaryMapper, EquationsMapper[] secondaryMappers) Simple constructor.Copy constructor. -
Method Summary
Modifier and TypeMethodDescriptionvoid
computeCoefficients
(int mu, double h) Compute the interpolation coefficients for dense output.protected void
computeInterpolatedStateAndDerivatives
(double theta, double oneMinusThetaH) Compute the state and derivatives at the interpolated time.protected StepInterpolator
doCopy()
Really copy the finalized instance.double
estimateError
(double[] scale) Estimate interpolation error.void
private void
resetTables
(int maxDegree) Reallocate the internal tables.void
Methods inherited from class org.apache.commons.math3.ode.sampling.AbstractStepInterpolator
copy, doFinalize, finalizeStep, getCurrentTime, getGlobalCurrentTime, getGlobalPreviousTime, getInterpolatedDerivatives, getInterpolatedSecondaryDerivatives, getInterpolatedSecondaryState, getInterpolatedState, getInterpolatedTime, getPreviousTime, isForward, readBaseExternal, reinitialize, setInterpolatedTime, setSoftCurrentTime, setSoftPreviousTime, shift, storeTime, writeBaseExternal
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerializable version identifier.- See Also:
-
y0Dot
private double[] y0DotSlope at the beginning of the step. -
y1
private double[] y1State at the end of the step. -
y1Dot
private double[] y1DotSlope at the end of the step. -
yMidDots
private double[][] yMidDotsDerivatives at the middle of the step. element 0 is state at midpoint, element 1 is first derivative ... -
polynomials
private double[][] polynomialsInterpolation polynomials. -
errfac
private double[] errfacError coefficients for the interpolation. -
currentDegree
private int currentDegreeDegree of the interpolation polynomials.
-
-
Constructor Details
-
GraggBulirschStoerStepInterpolator
public GraggBulirschStoerStepInterpolator()Simple constructor. This constructor should not be used directly, it is only intended for the serialization process. -
GraggBulirschStoerStepInterpolator
GraggBulirschStoerStepInterpolator(double[] y, double[] y0Dot, double[] y1, double[] y1Dot, double[][] yMidDots, boolean forward, EquationsMapper primaryMapper, EquationsMapper[] secondaryMappers) Simple constructor.- Parameters:
y
- reference to the integrator array holding the current statey0Dot
- reference to the integrator array holding the slope at the beginning of the stepy1
- reference to the integrator array holding the state at the end of the stepy1Dot
- reference to the integrator array holding the slope at the end of the stepyMidDots
- reference to the integrator array holding the derivatives at the middle point of the stepforward
- integration direction indicatorprimaryMapper
- equations mapper for the primary equations setsecondaryMappers
- equations mappers for the secondary equations sets
-
GraggBulirschStoerStepInterpolator
GraggBulirschStoerStepInterpolator(GraggBulirschStoerStepInterpolator interpolator) Copy constructor.- Parameters:
interpolator
- interpolator to copy from. The copy is a deep copy: its arrays are separated from the original arrays of the instance
-
-
Method Details
-
resetTables
private void resetTables(int maxDegree) Reallocate the internal tables. Reallocate the internal tables in order to be able to handle interpolation polynomials up to the given degree- Parameters:
maxDegree
- maximal degree to handle
-
doCopy
Really copy the finalized instance.This method is called by
AbstractStepInterpolator.copy()
after the step has been finalized. It must perform a deep copy to have an new instance completely independent for the original instance.- Specified by:
doCopy
in classAbstractStepInterpolator
- Returns:
- a copy of the finalized instance
-
computeCoefficients
public void computeCoefficients(int mu, double h) Compute the interpolation coefficients for dense output.- Parameters:
mu
- degree of the interpolation polynomialh
- current step
-
estimateError
public double estimateError(double[] scale) Estimate interpolation error.- Parameters:
scale
- scaling array- Returns:
- estimate of the interpolation error
-
computeInterpolatedStateAndDerivatives
protected void computeInterpolatedStateAndDerivatives(double theta, double oneMinusThetaH) Compute the state and derivatives at the interpolated time. This is the main processing method that should be implemented by the derived classes to perform the interpolation.- Specified by:
computeInterpolatedStateAndDerivatives
in classAbstractStepInterpolator
- Parameters:
theta
- normalized interpolation abscissa within the step (theta is zero at the previous time step and one at the current time step)oneMinusThetaH
- time gap between the interpolated time and the current time
-
writeExternal
- Specified by:
writeExternal
in interfaceExternalizable
- Specified by:
writeExternal
in classAbstractStepInterpolator
- Throws:
IOException
-
readExternal
- Specified by:
readExternal
in interfaceExternalizable
- Specified by:
readExternal
in classAbstractStepInterpolator
- Throws:
IOException
ClassNotFoundException
-