1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18package org.apache.commons.math.ode.nonstiff;
19
20
21/**
22 * This class implements a second order Runge-Kutta integrator for
23 * Ordinary Differential Equations.
24 *
25 * <p>This method is an explicit Runge-Kutta method, its Butcher-array
26 * is the following one :
27 * <pre>
28 *    0  |  0    0
29 *   1/2 | 1/2   0
30 *       |----------
31 *       |  0    1
32 * </pre>
33 * </p>
34 *
35 * @see EulerIntegrator
36 * @see ClassicalRungeKuttaIntegrator
37 * @see GillIntegrator
38 *
39 * @version $Revision: 810196 $ $Date: 2009-09-01 21:47:46 +0200 (mar. 01 sept. 2009) $
40 * @since 1.2
41 */
42
43public class MidpointIntegrator extends RungeKuttaIntegrator {
44
45  /** Time steps Butcher array. */
46  private static final double[] STATIC_C = {
47    1.0 / 2.0
48  };
49
50  /** Internal weights Butcher array. */
51  private static final double[][] STATIC_A = {
52    { 1.0 / 2.0 }
53  };
54
55  /** Propagation weights Butcher array. */
56  private static final double[] STATIC_B = {
57    0.0, 1.0
58  };
59
60  /** Simple constructor.
61   * Build a midpoint integrator with the given step.
62   * @param step integration step
63   */
64  public MidpointIntegrator(final double step) {
65    super("midpoint", STATIC_C, STATIC_A, STATIC_B, new MidpointStepInterpolator(), step);
66  }
67
68}
69