in commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/ode/nonstiff/DormandPrince853FieldStepInterpolator.java [216:298]
protected FieldODEStateAndDerivative<T> computeInterpolatedStateAndDerivatives(final FieldEquationsMapper<T> mapper,
final T time, final T theta,
final T thetaH, final T oneMinusThetaH)
throws MaxCountExceededException {
final T one = time.getField().getOne();
final T eta = one.subtract(theta);
final T twoTheta = theta.multiply(2);
final T theta2 = theta.multiply(theta);
final T dot1 = one.subtract(twoTheta);
final T dot2 = theta.multiply(theta.multiply(-3).add(2));
final T dot3 = twoTheta.multiply(theta.multiply(twoTheta.subtract(3)).add(1));
final T dot4 = theta2.multiply(theta.multiply(theta.multiply(5).subtract(8)).add(3));
final T dot5 = theta2.multiply(theta.multiply(theta.multiply(theta.multiply(-6).add(15)).subtract(12)).add(3));
final T dot6 = theta2.multiply(theta.multiply(theta.multiply(theta.multiply(theta.multiply(-7).add(18)).subtract(15)).add(4)));
final T[] interpolatedState;
final T[] interpolatedDerivatives;
if (getGlobalPreviousState() != null && theta.getReal() <= 0.5) {
final T f0 = thetaH;
final T f1 = f0.multiply(eta);
final T f2 = f1.multiply(theta);
final T f3 = f2.multiply(eta);
final T f4 = f3.multiply(theta);
final T f5 = f4.multiply(eta);
final T f6 = f5.multiply(theta);
final T[] p = MathArrays.buildArray(time.getField(), 16);
final T[] q = MathArrays.buildArray(time.getField(), 16);
for (int i = 0; i < p.length; ++i) {
p[i] = f0.multiply(d[0][i]).
add(f1.multiply(d[1][i])).
add(f2.multiply(d[2][i])).
add(f3.multiply(d[3][i])).
add(f4.multiply(d[4][i])).
add(f5.multiply(d[5][i])).
add(f6.multiply(d[6][i]));
q[i] = d[0][i].
add(dot1.multiply(d[1][i])).
add(dot2.multiply(d[2][i])).
add(dot3.multiply(d[3][i])).
add(dot4.multiply(d[4][i])).
add(dot5.multiply(d[5][i])).
add(dot6.multiply(d[6][i]));
}
interpolatedState = previousStateLinearCombination(p[0], p[1], p[ 2], p[ 3], p[ 4], p[ 5], p[ 6], p[ 7],
p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
interpolatedDerivatives = derivativeLinearCombination(q[0], q[1], q[ 2], q[ 3], q[ 4], q[ 5], q[ 6], q[ 7],
q[8], q[9], q[10], q[11], q[12], q[13], q[14], q[15]);
} else {
final T f0 = oneMinusThetaH.negate();
final T f1 = f0.multiply(theta).negate();
final T f2 = f1.multiply(theta);
final T f3 = f2.multiply(eta);
final T f4 = f3.multiply(theta);
final T f5 = f4.multiply(eta);
final T f6 = f5.multiply(theta);
final T[] p = MathArrays.buildArray(time.getField(), 16);
final T[] q = MathArrays.buildArray(time.getField(), 16);
for (int i = 0; i < p.length; ++i) {
p[i] = f0.multiply(d[0][i]).
add(f1.multiply(d[1][i])).
add(f2.multiply(d[2][i])).
add(f3.multiply(d[3][i])).
add(f4.multiply(d[4][i])).
add(f5.multiply(d[5][i])).
add(f6.multiply(d[6][i]));
q[i] = d[0][i].
add(dot1.multiply(d[1][i])).
add(dot2.multiply(d[2][i])).
add(dot3.multiply(d[3][i])).
add(dot4.multiply(d[4][i])).
add(dot5.multiply(d[5][i])).
add(dot6.multiply(d[6][i]));
}
interpolatedState = currentStateLinearCombination(p[0], p[1], p[ 2], p[ 3], p[ 4], p[ 5], p[ 6], p[ 7],
p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
interpolatedDerivatives = derivativeLinearCombination(q[0], q[1], q[ 2], q[ 3], q[ 4], q[ 5], q[ 6], q[ 7],
q[8], q[9], q[10], q[11], q[12], q[13], q[14], q[15]);
}
return new FieldODEStateAndDerivative<>(time, interpolatedState, interpolatedDerivatives);
}