Class AdamsNordsieckTransformer
This class is used by Adams-Bashforth
and
Adams-Moulton
integrators to convert between
classical representation with several previous first derivatives and Nordsieck
representation with higher order scaled derivatives.
We define scaled derivatives si(n) at step n as:
With the previous definition, the classical representation of multistep methods
uses first derivatives only, i.e. it handles yn, s1(n) and
qn where qn is defined as:
Another possible representation uses the Nordsieck vector with
higher degrees scaled derivatives all taken at the same step, i.e it handles yn,
s1(n) and rn) where rn is defined as:
Taylor series formulas show that for any index offset i, s1(n-i) can be
computed from s1(n), s2(n) ... sk(n), the formula being exact
for degree k polynomials.
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 Adams-Bashforth
method, the Nordsieck vector
at step n+1 is computed from the Nordsieck vector at step n as follows:
- yn+1 = yn + s1(n) + uT rn
- s1(n+1) = h f(tn+1, yn+1)
- rn+1 = (s1(n) - s1(n+1)) P-1 u + P-1 A P rn
where A is a rows shifting matrix (the lower left part is an identity matrix):
[ 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 Adams-Moulton
method, the predicted Nordsieck vector
at step n+1 is computed from the Nordsieck vector at step n as follows:
- Yn+1 = yn + s1(n) + uT rn
- S1(n+1) = h f(tn+1, Yn+1)
- Rn+1 = (s1(n) - s1(n+1)) P-1 u + P-1 A P rn
- yn+1 = yn + S1(n+1) + [ -1 +1 -1 +1 ... ±1 ] rn+1
- s1(n+1) = h f(tn+1, yn+1)
- rn+1 = Rn+1 + (s1(n+1) - S1(n+1)) P-1 u
where the upper case Yn+1, S1(n+1) and Rn+1 represent the predicted states whereas the lower case yn+1, sn+1 and rn+1 represent the corrected states.
We observe that both methods use similar update formulas. In both cases a P-1u 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.
-
Method Summary
Modifier and TypeMethodDescriptionstatic AdamsNordsieckTransformer
getInstance
(int nSteps) Get the Nordsieck transformer for a given number of steps.initializeHighOrderDerivatives
(double h, double[] t, double[][] y, double[][] yDot) Initialize the high order scaled derivatives at step start.Update the high order scaled derivatives for Adams integrators (phase 1).void
updateHighOrderDerivativesPhase2
(double[] start, double[] end, Array2DRowRealMatrix highOrder) Update the high order scaled derivatives Adams integrators (phase 2).
-
Method Details
-
getInstance
Get the Nordsieck transformer for a given number of steps.- Parameters:
nSteps
- number of steps of the multistep method (excluding the one being computed)- Returns:
- Nordsieck transformer for the specified number of steps
-
initializeHighOrderDerivatives
public Array2DRowRealMatrix initializeHighOrderDerivatives(double h, double[] t, double[][] y, double[][] yDot) Initialize the high order scaled derivatives at step start.- Parameters:
h
- step size to use for scalingt
- first steps timesy
- first steps statesyDot
- first steps derivatives- Returns:
- Nordieck vector at start of first step (h2/2 y''n, h3/6 y'''n ... hk/k! y(k)n)
-
updateHighOrderDerivativesPhase1
Update the high order scaled derivatives for Adams integrators (phase 1).The complete update of high order derivatives has a form similar to:
this method computes the P-1 A P rn part.- Parameters:
highOrder
- high order scaled derivatives (h2/2 y'', ... hk/k! y(k))- Returns:
- updated high order derivatives
- See Also:
-
updateHighOrderDerivativesPhase2
public void updateHighOrderDerivativesPhase2(double[] start, double[] end, Array2DRowRealMatrix highOrder) Update the high order scaled derivatives Adams integrators (phase 2).The complete update of high order derivatives has a form similar to:
this method computes the (s1(n) - s1(n+1)) P-1 u part.Phase 1 of the update must already have been performed.
- Parameters:
start
- first order scaled derivatives at step startend
- first order scaled derivatives at step endhighOrder
- high order scaled derivatives, will be modified (h2/2 y'', ... hk/k! y(k))- See Also:
-