Top Description Fields Constructors Methods
org.apache.commons.math3.ode

public Class FirstOrderConverter

extends Object
implements FirstOrderDifferentialEquations
Class Inheritance
All Implemented Interfaces
org.apache.commons.math3.ode.FirstOrderDifferentialEquations

This class converts second order differential equations to first order ones.

This class is a wrapper around a SecondOrderDifferentialEquations which allow to use a FirstOrderIntegrator to integrate it.

The transformation is done by changing the n dimension state vector to a 2n dimension vector, where the first n components are the initial state variables and the n last components are their first time derivative. The first time derivative of this state vector then really contains both the first and second time derivative of the initial state vector, which can be handled by the underlying second order equations set.

One should be aware that the data is duplicated during the transformation process and that for each call to computeDerivatives, this wrapper does copy 4n scalars : 2n before the call to computeSecondDerivatives in order to dispatch the y state vector into z and zDot, and 2n after the call to gather zDot and zDDot into yDot. Since the underlying problem by itself perhaps also needs to copy data and dispatch the arrays into domain objects, this has an impact on both memory and CPU usage. The only way to avoid this duplication is to perform the transformation at the problem level, i.e. to implement the problem as a first order one and then avoid using this class.

Since
1.2
See Also
FirstOrderIntegrator, FirstOrderDifferentialEquations, SecondOrderDifferentialEquations

Field Summary

Modifier and TypeField and Description
private final int
dimension

second order problem dimension.

private final SecondOrderDifferentialEquations
equations

Underlying second order equations set.

private final double[]
z

state vector.

private final double[]
zDDot

second time derivative of the state vector.

private final double[]
zDot

first time derivative of the state vector.

Constructor Summary

AccessConstructor and Description
public
FirstOrderConverter(final SecondOrderDifferentialEquations
second order equations set to convert
equations
)

Simple constructor.

Method Summary

Modifier and TypeMethod and Description
public void
computeDerivatives(final double
current value of the independent time variable
t
,
final double[]
array containing the current value of the state vector
y
,
final double[]
placeholder array where to put the time derivative of the state vector
yDot
)

Implements org.apache.commons.math3.ode.FirstOrderDifferentialEquations.computeDerivatives.

Get the current time derivative of the state vector.

public int

Returns:

dimension of the problem
getDimension
()

Implements org.apache.commons.math3.ode.FirstOrderDifferentialEquations.getDimension.

Get the dimension of the problem.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

dimensionback to summary
private final int dimension

second order problem dimension.

equationsback to summary
private final SecondOrderDifferentialEquations equations

Underlying second order equations set.

zback to summary
private final double[] z

state vector.

zDDotback to summary
private final double[] zDDot

second time derivative of the state vector.

zDotback to summary
private final double[] zDot

first time derivative of the state vector.

Constructor Detail

FirstOrderConverterback to summary
public FirstOrderConverter(final SecondOrderDifferentialEquations equations)

Simple constructor. Build a converter around a second order equations set.

Parameters
equations:SecondOrderDifferentialEquations

second order equations set to convert

Method Detail

computeDerivativesback to summary
public void computeDerivatives(final double t, final double[] y, final double[] yDot)

Implements org.apache.commons.math3.ode.FirstOrderDifferentialEquations.computeDerivatives.

Get the current time derivative of the state vector.

Parameters
t:double

current value of the independent time variable

y:double[]

array containing the current value of the state vector

yDot:double[]

placeholder array where to put the time derivative of the state vector

getDimensionback to summary
public int getDimension()

Implements org.apache.commons.math3.ode.FirstOrderDifferentialEquations.getDimension.

Get the dimension of the problem.

The dimension of the first order problem is twice the dimension of the underlying second order problem.

Returns:int

dimension of the problem