View Javadoc
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  
18  package org.apache.commons.math4.legacy.ode;
19  
20  import org.apache.commons.math4.legacy.exception.DimensionMismatchException;
21  import org.apache.commons.math4.legacy.exception.MaxCountExceededException;
22  import org.apache.commons.math4.legacy.exception.NoBracketingException;
23  import org.apache.commons.math4.legacy.exception.NumberIsTooSmallException;
24  
25  /** This interface represents a first order integrator for
26   * differential equations.
27  
28   * <p>The classes which are devoted to solve first order differential
29   * equations should implement this interface. The problems which can
30   * be handled should implement the {@link
31   * FirstOrderDifferentialEquations} interface.</p>
32   *
33   * @see FirstOrderDifferentialEquations
34   * @see org.apache.commons.math4.legacy.ode.sampling.StepHandler
35   * @see org.apache.commons.math4.legacy.ode.events.EventHandler
36   * @since 1.2
37   */
38  
39  public interface FirstOrderIntegrator extends ODEIntegrator {
40  
41    /** Integrate the differential equations up to the given time.
42     * <p>This method solves an Initial Value Problem (IVP).</p>
43     * <p>Since this method stores some internal state variables made
44     * available in its public interface during integration ({@link
45     * #getCurrentSignedStepsize()}), it is <em>not</em> thread-safe.</p>
46     * @param equations differential equations to integrate
47     * @param t0 initial time
48     * @param y0 initial value of the state vector at t0
49     * @param t target time for the integration
50     * (can be set to a value smaller than <code>t0</code> for backward integration)
51     * @param y placeholder where to put the state vector at each successful
52     *  step (and hence at the end of integration), can be the same object as y0
53     * @return stop time, will be the same as target time if integration reached its
54     * target, but may be different if some {@link
55     * org.apache.commons.math4.legacy.ode.events.EventHandler} stops it at some point.
56     * @exception DimensionMismatchException if arrays dimension do not match equations settings
57     * @exception NumberIsTooSmallException if integration step is too small
58     * @exception MaxCountExceededException if the number of functions evaluations is exceeded
59     * @exception NoBracketingException if the location of an event cannot be bracketed
60     */
61    double integrate (FirstOrderDifferentialEquations equations,
62                      double t0, double[] y0, double t, double[] y)
63        throws DimensionMismatchException, NumberIsTooSmallException,
64               MaxCountExceededException, NoBracketingException;
65  }