T
 the type of the field elementspublic class AdamsNordsieckFieldTransformer<T extends RealFieldElement<T>> extends Object
This class is used by AdamsBashforth
and
AdamsMoulton
integrators to convert between
classical representation with several previous first derivatives and Nordsieck
representation with higher order scaled derivatives.
We define scaled derivatives s_{i}(n) at step n as:
s_{1}(n) = h y'_{n} for first derivative
s_{2}(n) = h^{2}/2 y''_{n} for second derivative
s_{3}(n) = h^{3}/6 y'''_{n} for third derivative
...
s_{k}(n) = h^{k}/k! y^{(k)}_{n} for k^{th} derivative
With the previous definition, the classical representation of multistep methods uses first derivatives only, i.e. it handles y_{n}, s_{1}(n) and q_{n} where q_{n} is defined as:
q_{n} = [ s_{1}(n1) s_{1}(n2) ... s_{1}(n(k1)) ]^{T}
Another possible representation uses the Nordsieck vector with higher degrees scaled derivatives all taken at the same step, i.e it handles y_{n}, s_{1}(n) and r_{n}) where r_{n} is defined as:
r_{n} = [ s_{2}(n), s_{3}(n) ... s_{k}(n) ]^{T}
Taylor series formulas show that for any index offset i, s_{1}(ni) can be computed from s_{1}(n), s_{2}(n) ... s_{k}(n), the formula being exact for degree k polynomials.
s_{1}(ni) = s_{1}(n) + ∑_{j>0} (j+1) (i)^{j} s_{j+1}(n)
q_{n} = s_{1}(n) u + P r_{n}
[ 2 3 4 5 ... ] [ 4 12 32 80 ... ] P = [ 6 27 108 405 ... ] [ 8 48 256 1280 ... ] [ ... ]
Changing i into +i in the formula above can be used to compute a similar transform between classical representation and Nordsieck vector at step start. The resulting matrix is simply the absolute value of matrix P.
For AdamsBashforth
method, the Nordsieck vector
at step n+1 is computed from the Nordsieck vector at step n as follows:
[ 0 0 ... 0 0  0 ] [ +] [ 1 0 ... 0 0  0 ] A = [ 0 1 ... 0 0  0 ] [ ...  0 ] [ 0 0 ... 1 0  0 ] [ 0 0 ... 0 1  0 ]
For AdamsMoulton
method, the predicted Nordsieck vector
at step n+1 is computed from the Nordsieck vector at step n as follows:
We observe that both methods use similar update formulas. In both cases a P^{1}u vector and a P^{1} A P matrix are used that do not depend on the state, they only depend on k. This class handles these transformations.
Modifier and Type  Method and Description 

static <T extends RealFieldElement<T>> 
getInstance(Field<T> field,
int nSteps)
Get the Nordsieck transformer for a given field and number of steps.

Array2DRowFieldMatrix<T> 
initializeHighOrderDerivatives(T h,
T[] t,
T[][] y,
T[][] yDot)
Initialize the high order scaled derivatives at step start.

Array2DRowFieldMatrix<T> 
updateHighOrderDerivativesPhase1(Array2DRowFieldMatrix<T> highOrder)
Update the high order scaled derivatives for Adams integrators (phase 1).

void 
updateHighOrderDerivativesPhase2(T[] start,
T[] end,
Array2DRowFieldMatrix<T> highOrder)
Update the high order scaled derivatives Adams integrators (phase 2).

public static <T extends RealFieldElement<T>> AdamsNordsieckFieldTransformer<T> getInstance(Field<T> field, int nSteps)
T
 the type of the field elementsfield
 field to which the time and state vector elements belongnSteps
 number of steps of the multistep method
(excluding the one being computed)public Array2DRowFieldMatrix<T> initializeHighOrderDerivatives(T h, T[] t, T[][] y, T[][] yDot)
h
 step size to use for scalingt
 first steps timesy
 first steps statesyDot
 first steps derivativespublic Array2DRowFieldMatrix<T> updateHighOrderDerivativesPhase1(Array2DRowFieldMatrix<T> highOrder)
The complete update of high order derivatives has a form similar to:
r_{n+1} = (s_{1}(n)  s_{1}(n+1)) P^{1} u + P^{1} A P r_{n}
highOrder
 high order scaled derivatives
(h^{2}/2 y'', ... h^{k}/k! y(k))updateHighOrderDerivativesPhase2(RealFieldElement[], RealFieldElement[], Array2DRowFieldMatrix)
public void updateHighOrderDerivativesPhase2(T[] start, T[] end, Array2DRowFieldMatrix<T> highOrder)
The complete update of high order derivatives has a form similar to:
r_{n+1} = (s_{1}(n)  s_{1}(n+1)) P^{1} u + P^{1} A P r_{n}
Phase 1 of the update must already have been performed.
start
 first order scaled derivatives at step startend
 first order scaled derivatives at step endhighOrder
 high order scaled derivatives, will be modified
(h^{2}/2 y'', ... h^{k}/k! y(k))updateHighOrderDerivativesPhase1(Array2DRowFieldMatrix)
Copyright © 2003–2021 The Apache Software Foundation. All rights reserved.