org.apache.commons.math3.ode.sampling

## Class NordsieckStepInterpolator

- java.lang.Object
- - org.apache.commons.math3.ode.sampling.AbstractStepInterpolator
  - - org.apache.commons.math3.ode.sampling.NordsieckStepInterpolator

- All Implemented Interfaces:
    Externalizable, Serializable, StepInterpolator

      public class NordsieckStepInterpolator
      extends AbstractStepInterpolator

  This class implements an interpolator for integrators using Nordsieck representation.

  This interpolator computes dense output around the current point. The interpolation equation is based on Taylor series formulas.

  Since:
    2.0
  Version:
    $Id: NordsieckStepInterpolator.java 1416643 2012-12-03 19:37:14Z tn $
  See Also:
    `AdamsBashforthIntegrator`, `AdamsMoultonIntegrator`, Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private Array2DRowRealMatrix` | `nordsieck` Nordsieck vector.
    `private double` | `referenceTime` Reference time for all arrays.
    `private double[]` | `scaled` First scaled derivative.
    `private double` | `scalingH` Step size used in the first scaled derivative and Nordsieck vector.
    `private static long` | `serialVersionUID` Serializable version identifier
    `protected double[]` | `stateVariation` State variation.

    - ### Fields inherited from class org.apache.commons.math3.ode.sampling.AbstractStepInterpolator

      `currentState, h, interpolatedDerivatives, interpolatedPrimaryDerivatives, interpolatedPrimaryState, interpolatedSecondaryDerivatives, interpolatedSecondaryState, interpolatedState, interpolatedTime`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `NordsieckStepInterpolator()` Simple constructor.
    `NordsieckStepInterpolator(NordsieckStepInterpolator interpolator)` Copy constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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[]` | `getInterpolatedStateVariation()` Get the state vector variation from current to interpolated state.
    `void` | `readExternal(ObjectInput in)`
    `void` | `reinitialize(double[] y, boolean forward, EquationsMapper primaryMapper, EquationsMapper[] secondaryMappers)` Reinitialize the instance.
    `void` | `reinitialize(double time, double stepSize, double[] scaledDerivative, Array2DRowRealMatrix nordsieckVector)` Reinitialize the instance.
    `void` | `rescale(double stepSize)` Rescale the instance.
    `void` | `writeExternal(ObjectOutput out)`

    - ### 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, setInterpolatedTime, setSoftCurrentTime, setSoftPreviousTime, shift, storeTime, writeBaseExternal`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### serialVersionUID

          private static final long serialVersionUID

      Serializable version identifier
      See Also:
        Constant Field Values

    - #### stateVariation

          protected double[] stateVariation

      State variation.

    - #### scalingH

          private double scalingH

      Step size used in the first scaled derivative and Nordsieck vector.

    - #### referenceTime

          private double referenceTime

      Reference time for all arrays.

      Sometimes, the reference time is the same as previousTime, sometimes it is the same as currentTime, so we use a separate field to avoid any confusion.

    - #### scaled

          private double[] scaled

      First scaled derivative.

    - #### nordsieck

          private Array2DRowRealMatrix nordsieck

      Nordsieck vector.

  - ### Constructor Detail

    - #### NordsieckStepInterpolator

          public NordsieckStepInterpolator()

      Simple constructor. This constructor builds an instance that is not usable yet, the `AbstractStepInterpolator.reinitialize(double[], boolean, org.apache.commons.math3.ode.EquationsMapper, org.apache.commons.math3.ode.EquationsMapper[])` method should be called before using the instance in order to initialize the internal arrays. This constructor is used only in order to delay the initialization in some cases.

    - #### NordsieckStepInterpolator

          public NordsieckStepInterpolator(NordsieckStepInterpolator 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 Detail

    - #### doCopy

          protected StepInterpolator 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 class `AbstractStepInterpolator`
      Returns:
        a copy of the finalized instance

    - #### reinitialize

          public void reinitialize(double[] y,
                          boolean forward,
                          EquationsMapper primaryMapper,
                          EquationsMapper[] secondaryMappers)

      Reinitialize the instance.

      Beware that all arrays must be references to integrator arrays, in order to ensure proper update without copy.

      Overrides:
        `reinitialize` in class `AbstractStepInterpolator`
      Parameters:
        `y` - reference to the integrator array holding the state at the end of the step
        `forward` - integration direction indicator
        `primaryMapper` - equations mapper for the primary equations set
        `secondaryMappers` - equations mappers for the secondary equations sets

    - #### reinitialize

          public void reinitialize(double time,
                          double stepSize,
                          double[] scaledDerivative,
                          Array2DRowRealMatrix nordsieckVector)

      Reinitialize the instance.

      Beware that all arrays must be references to integrator arrays, in order to ensure proper update without copy.

      Parameters:
        `time` - time at which all arrays are defined
        `stepSize` - step size used in the scaled and nordsieck arrays
        `scaledDerivative` - reference to the integrator array holding the first scaled derivative
        `nordsieckVector` - reference to the integrator matrix holding the nordsieck vector

    - #### rescale

          public void rescale(double stepSize)

      Rescale the instance.

      Since the scaled and Nordiseck arrays are shared with the caller, this method has the side effect of rescaling this arrays in the caller too.

      Parameters:
        `stepSize` - new step size to use in the scaled and nordsieck arrays

    - #### getInterpolatedStateVariation

          public double[] getInterpolatedStateVariation()
                                                 throws MaxCountExceededException

      Get the state vector variation from current to interpolated state.

      This method is aimed at computing y(tinterpolation) -y(tcurrent) accurately by avoiding the cancellation errors that would occur if the subtraction were performed explicitly.

      The returned vector is a reference to a reused array, so it should not be modified and it should be copied if it needs to be preserved across several calls.

      Returns:
        state vector at time `AbstractStepInterpolator.getInterpolatedTime()`
      Throws:
        `MaxCountExceededException` - if the number of functions evaluations is exceeded
      See Also:
        `AbstractStepInterpolator.getInterpolatedDerivatives()`

    - #### 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 class `AbstractStepInterpolator`
      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

          public void writeExternal(ObjectOutput out)
                             throws IOException

      Specified by:
        `writeExternal` in interface `Externalizable`
      Specified by:
        `writeExternal` in class `AbstractStepInterpolator`
      Throws:
        `IOException`

    - #### readExternal

          public void readExternal(ObjectInput in)
                            throws IOException,
                                   ClassNotFoundException

      Specified by:
        `readExternal` in interface `Externalizable`
      Specified by:
        `readExternal` in class `AbstractStepInterpolator`
      Throws:
        `IOException`
        `ClassNotFoundException`

Copyright (c) 2003-2013 Apache Software Foundation