1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.hipparchus.ode.nonstiff;
24
25 import org.hipparchus.CalculusFieldElement;
26 import org.hipparchus.Field;
27 import org.hipparchus.ode.FieldEquationsMapper;
28 import org.hipparchus.ode.FieldODEStateAndDerivative;
29 import org.hipparchus.ode.nonstiff.interpolators.MidpointFieldStateInterpolator;
30 import org.hipparchus.util.MathArrays;
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public class MidpointFieldIntegrator<T extends CalculusFieldElement<T>> extends FixedStepRungeKuttaFieldIntegrator<T> {
55
56
57 public static final String METHOD_NAME = MidpointIntegrator.METHOD_NAME;
58
59
60
61
62
63
64 public MidpointFieldIntegrator(final Field<T> field, final T step) {
65 super(field, METHOD_NAME, step);
66 }
67
68
69 @Override
70 public T[] getC() {
71 final T[] c = MathArrays.buildArray(getField(), 1);
72 c[0] = getField().getOne().newInstance(0.5);
73 return c;
74 }
75
76
77 @Override
78 public T[][] getA() {
79 final T[][] a = MathArrays.buildArray(getField(), 1, 1);
80 a[0][0] = FieldExplicitRungeKuttaIntegrator.fraction(getField(), 1, 2);
81 return a;
82 }
83
84
85 @Override
86 public T[] getB() {
87 final T[] b = MathArrays.buildArray(getField(), 2);
88 b[0] = getField().getZero();
89 b[1] = getField().getOne();
90 return b;
91 }
92
93
94 @Override
95 protected MidpointFieldStateInterpolator<T>
96 createInterpolator(final boolean forward, T[][] yDotK,
97 final FieldODEStateAndDerivative<T> globalPreviousState,
98 final FieldODEStateAndDerivative<T> globalCurrentState,
99 final FieldEquationsMapper<T> mapper) {
100 return new MidpointFieldStateInterpolator<>(getField(), forward, yDotK, globalPreviousState, globalCurrentState,
101 globalPreviousState, globalCurrentState, mapper);
102 }
103
104 }