You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2012/09/02 16:21:02 UTC
svn commit: r1379975 [1/3] - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math3/ode/
main/java/org/apache/commons/math3/ode/events/
main/java/org/apache/commons/math3/ode/nonstiff/
main/java/org/apache/commons/math3/ode/sampling/ tes...
Author: luc
Date: Sun Sep 2 14:21:00 2012
New Revision: 1379975
URL: http://svn.apache.org/viewvc?rev=1379975&view=rev
Log:
populate throws declaration for ODE package
Added:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/UnknownParameterException.java
- copied, changed from r1379974, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedODE.java
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractParameterizable.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ExpandableStatefulODE.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderDifferentialEquations.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/JacobianMatrices.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MainStateJacobianProvider.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MultistepIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianProvider.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianWrapper.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedODE.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedWrapper.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/SecondaryEquations.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/events/EventState.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdaptiveStepsizeIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853StepInterpolator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/GraggBulirschStoerIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaIntegrator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/sampling/AbstractStepInterpolator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/sampling/NordsieckStepInterpolator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/sampling/StepHandler.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/sampling/StepInterpolator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/sampling/StepNormalizer.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/ContinuousOutputModelTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/FirstOrderConverterTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/JacobianMatricesTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/TestProblemHandler.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/events/EventStateTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/events/OverlappingEventsTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/events/ReappearingEventTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthIntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonIntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaIntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaStepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54IntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54StepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853IntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853StepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerIntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerStepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/GillIntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/GillStepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/GraggBulirschStoerIntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/GraggBulirschStoerStepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54IntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54StepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointIntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointStepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesIntegratorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesStepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/sampling/DummyStepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/sampling/NordsieckStepInterpolatorTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/sampling/StepInterpolatorTestUtils.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/sampling/StepNormalizerOutputTestBase.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ode/sampling/StepNormalizerTest.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractIntegrator.java Sun Sep 2 14:21:00 2012
@@ -29,9 +29,9 @@ import java.util.TreeSet;
import org.apache.commons.math3.analysis.solvers.BracketingNthOrderBrentSolver;
import org.apache.commons.math3.analysis.solvers.UnivariateSolver;
import org.apache.commons.math3.exception.DimensionMismatchException;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.MathInternalError;
import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.exception.util.LocalizedFormats;
import org.apache.commons.math3.ode.events.EventHandler;
@@ -125,9 +125,14 @@ public abstract class AbstractIntegrator
final double maxCheckInterval,
final double convergence,
final int maxIterationCount) {
- addEventHandler(handler, maxCheckInterval, convergence,
- maxIterationCount,
- new BracketingNthOrderBrentSolver(convergence, 5));
+ try {
+ addEventHandler(handler, maxCheckInterval, convergence,
+ maxIterationCount,
+ new BracketingNthOrderBrentSolver(convergence, 5));
+ } catch (NumberIsTooSmallException ntse) {
+ // this should never happen
+ throw new MathInternalError();
+ }
}
/** {@inheritDoc} */
@@ -210,7 +215,8 @@ public abstract class AbstractIntegrator
/** {@inheritDoc} */
public double integrate(final FirstOrderDifferentialEquations equations,
final double t0, final double[] y0, final double t, final double[] y)
- throws MathIllegalStateException, MathIllegalArgumentException {
+ throws DimensionMismatchException, NumberIsTooSmallException,
+ MaxCountExceededException, NoBracketingException {
if (y0.length != equations.getDimension()) {
throw new DimensionMismatchException(y0.length, equations.getDimension());
@@ -246,21 +252,25 @@ public abstract class AbstractIntegrator
* @param equations complete set of differential equations to integrate
* @param t target time for the integration
* (can be set to a value smaller than <code>t0</code> for backward integration)
- * @throws MathIllegalStateException if the integrator cannot perform integration
- * @throws MathIllegalArgumentException if integration parameters are wrong (typically
- * too small integration span)
+ * @exception NumberIsTooSmallException if integration step is too small
+ * @throws DimensionMismatchException if the dimension of the complete state does not
+ * match the complete equations sets dimension
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception NoBracketingException if the location of an event cannot be bracketed
*/
public abstract void integrate(ExpandableStatefulODE equations, double t)
- throws MathIllegalStateException, MathIllegalArgumentException;
+ throws NumberIsTooSmallException, DimensionMismatchException,
+ MaxCountExceededException, NoBracketingException;
/** Compute the derivatives and check the number of evaluations.
* @param t current value of the independent <I>time</I> variable
* @param y array containing the current value of the state vector
* @param yDot placeholder array where to put the time derivative of the state vector
* @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
*/
public void computeDerivatives(final double t, final double[] y, final double[] yDot)
- throws MaxCountExceededException {
+ throws MaxCountExceededException, DimensionMismatchException {
evaluations.incrementCount();
expandable.computeDerivatives(t, y, yDot);
}
@@ -283,12 +293,15 @@ public abstract class AbstractIntegrator
* @param yDot placeholder array where to put the time derivative of the state vector
* @param tEnd final integration time
* @return time at end of step
- * @exception MathIllegalStateException if the value of one event state cannot be evaluated
+ * @exception MaxCountExceededException if the interpolator throws one because
+ * the number of functions evaluations is exceeded
+ * @exception NoBracketingException if the location of an event cannot be bracketed
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
* @since 2.2
*/
protected double acceptStep(final AbstractStepInterpolator interpolator,
final double[] y, final double[] yDot, final double tEnd)
- throws MathIllegalStateException {
+ throws MaxCountExceededException, DimensionMismatchException, NoBracketingException {
double previousT = interpolator.getGlobalPreviousTime();
final double currentT = interpolator.getGlobalCurrentTime();
@@ -397,9 +410,11 @@ public abstract class AbstractIntegrator
* @param equations set of differential equations
* @param t target time for the integration
* @exception NumberIsTooSmallException if integration span is too small
+ * @exception DimensionMismatchException if adaptive step size integrators
+ * tolerance arrays dimensions are not compatible with equations settings
*/
protected void sanityChecks(final ExpandableStatefulODE equations, final double t)
- throws NumberIsTooSmallException {
+ throws NumberIsTooSmallException, DimensionMismatchException {
final double threshold = 1000 * FastMath.ulp(FastMath.max(FastMath.abs(equations.getTime()),
FastMath.abs(t)));
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractParameterizable.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractParameterizable.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractParameterizable.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/AbstractParameterizable.java Sun Sep 2 14:21:00 2012
@@ -19,9 +19,6 @@ package org.apache.commons.math3.ode;
import java.util.ArrayList;
import java.util.Collection;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.util.LocalizedFormats;
-
/** This abstract class provides boilerplate parameters list.
*
* @version $Id$
@@ -68,13 +65,13 @@ public abstract class AbstractParameteri
/** Check if a parameter is supported and throw an IllegalArgumentException if not.
* @param name name of the parameter to check
- * @exception MathIllegalArgumentException if the parameter is not supported
+ * @exception UnknownParameterException if the parameter is not supported
* @see #isSupported(String)
*/
public void complainIfNotSupported(final String name)
- throws MathIllegalArgumentException {
+ throws UnknownParameterException {
if (!isSupported(name)) {
- throw new MathIllegalArgumentException(LocalizedFormats.UNKNOWN_PARAMETER, name);
+ throw new UnknownParameterException(name);
}
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ContinuousOutputModel.java Sun Sep 2 14:21:00 2012
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.commons.math3.exception.DimensionMismatchException;
import org.apache.commons.math3.exception.MathIllegalArgumentException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
import org.apache.commons.math3.exception.util.LocalizedFormats;
import org.apache.commons.math3.ode.sampling.StepHandler;
import org.apache.commons.math3.ode.sampling.StepInterpolator;
@@ -123,9 +124,11 @@ public class ContinuousOutputModel
* @exception MathIllegalArgumentException if the model to append is not
* compatible with the instance (dimension of the state vector,
* propagation direction, hole between the dates)
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * during step finalization
*/
public void append(final ContinuousOutputModel model)
- throws MathIllegalArgumentException {
+ throws MathIllegalArgumentException, MaxCountExceededException {
if (model.steps.size() == 0) {
return;
@@ -180,8 +183,11 @@ public class ContinuousOutputModel
* the instance for later use.
* @param interpolator interpolator for the last accepted step.
* @param isLast true if the step is the last one
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * during step finalization
*/
- public void handleStep(final StepInterpolator interpolator, final boolean isLast) {
+ public void handleStep(final StepInterpolator interpolator, final boolean isLast)
+ throws MaxCountExceededException {
if (steps.size() == 0) {
initialTime = interpolator.getPreviousTime();
@@ -326,8 +332,9 @@ public class ContinuousOutputModel
/**
* Get the state vector of the interpolated point.
* @return state vector at time {@link #getInterpolatedTime}
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
*/
- public double[] getInterpolatedState() {
+ public double[] getInterpolatedState() throws MaxCountExceededException {
return steps.get(index).getInterpolatedState();
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ExpandableStatefulODE.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ExpandableStatefulODE.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ExpandableStatefulODE.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ExpandableStatefulODE.java Sun Sep 2 14:21:00 2012
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
/**
@@ -107,8 +108,11 @@ public class ExpandableStatefulODE {
* @param t current value of the independent <I>time</I> variable
* @param y array containing the current value of the complete state vector
* @param yDot placeholder array where to put the time derivative of the complete state vector
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
*/
- public void computeDerivatives(final double t, final double[] y, final double[] yDot) {
+ public void computeDerivatives(final double t, final double[] y, final double[] yDot)
+ throws MaxCountExceededException, DimensionMismatchException {
// compute derivatives of the primary equations
primaryMapper.extractEquationData(y, primaryState);
@@ -279,7 +283,7 @@ public class ExpandableStatefulODE {
* @throws DimensionMismatchException if the dimension of the complete state does not
* match the complete equations sets dimension
*/
- public double[] getCompleteState() {
+ public double[] getCompleteState() throws DimensionMismatchException {
// allocate complete array
double[] completeState = new double[getTotalDimension()];
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderDifferentialEquations.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderDifferentialEquations.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderDifferentialEquations.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderDifferentialEquations.java Sun Sep 2 14:21:00 2012
@@ -17,6 +17,9 @@
package org.apache.commons.math3.ode;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+
/** This interface represents a first order differential equations set.
@@ -57,7 +60,10 @@ public interface FirstOrderDifferentialE
* @param t current value of the independent <I>time</I> variable
* @param y array containing the current value of the state vector
* @param yDot placeholder array where to put the time derivative of the state vector
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
*/
- void computeDerivatives(double t, double[] y, double[] yDot);
+ void computeDerivatives(double t, double[] y, double[] yDot)
+ throws MaxCountExceededException, DimensionMismatchException;
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/FirstOrderIntegrator.java Sun Sep 2 14:21:00 2012
@@ -17,8 +17,10 @@
package org.apache.commons.math3.ode;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
/** This interface represents a first order integrator for
* differential equations.
@@ -52,12 +54,14 @@ public interface FirstOrderIntegrator ex
* @return stop time, will be the same as target time if integration reached its
* target, but may be different if some {@link
* org.apache.commons.math3.ode.events.EventHandler} stops it at some point.
- * @throws MathIllegalStateException if the integrator cannot perform integration
- * @throws MathIllegalArgumentException if integration parameters are wrong (typically
- * too small integration span)
+ * @exception DimensionMismatchException if arrays dimension do not match equations settings
+ * @exception NumberIsTooSmallException if integration step is too small
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception NoBracketingException if the location of an event cannot be bracketed
*/
double integrate (FirstOrderDifferentialEquations equations,
double t0, double[] y0, double t, double[] y)
- throws MathIllegalStateException, MathIllegalArgumentException;
+ throws DimensionMismatchException, NumberIsTooSmallException,
+ MaxCountExceededException, NoBracketingException;
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/JacobianMatrices.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/JacobianMatrices.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/JacobianMatrices.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/JacobianMatrices.java Sun Sep 2 14:21:00 2012
@@ -18,10 +18,13 @@ package org.apache.commons.math3.ode;
import java.lang.reflect.Array;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.apache.commons.math3.exception.DimensionMismatchException;
import org.apache.commons.math3.exception.MathIllegalArgumentException;
+import org.apache.commons.math3.exception.MathInternalError;
+import org.apache.commons.math3.exception.MaxCountExceededException;
import org.apache.commons.math3.exception.util.LocalizedFormats;
/**
@@ -96,12 +99,12 @@ public class JacobianMatrices {
* @param hY step used for finite difference computation with respect to state vector
* @param parameters parameters to consider for Jacobian matrices processing
* (may be null if parameters Jacobians is not desired)
- * @exception MathIllegalArgumentException if one parameter is not supported
- * or there is a dimension mismatch with {@code hY}
+ * @exception DimensionMismatchException if there is a dimension mismatch between
+ * the steps array {@code hY} and the equation dimension
*/
public JacobianMatrices(final FirstOrderDifferentialEquations fode, final double[] hY,
final String... parameters)
- throws MathIllegalArgumentException {
+ throws DimensionMismatchException {
this(new MainStateJacobianWrapper(fode, hY), parameters);
}
@@ -116,11 +119,9 @@ public class JacobianMatrices {
* @param jode the primary first order differential equations set to extend
* @param parameters parameters to consider for Jacobian matrices processing
* (may be null if parameters Jacobians is not desired)
- * @exception MathIllegalArgumentException if one parameter is not supported
*/
public JacobianMatrices(final MainStateJacobianProvider jode,
- final String... parameters)
- throws MathIllegalArgumentException {
+ final String... parameters) {
this.efode = null;
this.index = -1;
@@ -155,19 +156,21 @@ public class JacobianMatrices {
/** Register the variational equations for the Jacobians matrices to the expandable set.
* @param expandable expandable set into which variational equations should be registered
- * @exception MathIllegalArgumentException if the primary set of the expandable set does
+ * @throws DimensionMismatchException if the dimension of the partial state does not
+ * match the selected equations set dimension
+ * @exception MismatchedEquations if the primary set of the expandable set does
* not match the one used to build the instance
* @see ExpandableStatefulODE#addSecondaryEquations(SecondaryEquations)
*/
public void registerVariationalEquations(final ExpandableStatefulODE expandable)
- throws MathIllegalArgumentException {
+ throws DimensionMismatchException, MismatchedEquations {
// safety checks
final FirstOrderDifferentialEquations ode = (jode instanceof MainStateJacobianWrapper) ?
((MainStateJacobianWrapper) jode).ode :
jode;
if (expandable.getPrimary() != ode) {
- throw new MathIllegalArgumentException(LocalizedFormats.UNMATCHED_ODE_IN_EXPANDED_SET);
+ throw new MismatchedEquations();
}
efode = expandable;
@@ -183,7 +186,7 @@ public class JacobianMatrices {
jacobianProviders.add(provider);
}
- /** Add a parameter Jacobian provider.
+ /** Set a parameter Jacobian provider.
* @param parameterizedOde the parameterized ODE to compute the parameter Jacobian matrix using finite differences
*/
public void setParameterizedODE(final ParameterizedODE parameterizedOde) {
@@ -206,9 +209,10 @@ public class JacobianMatrices {
* @param parameter parameter to consider for Jacobian processing
* @param hP step for Jacobian finite difference computation w.r.t. the specified parameter
* @see ParameterizedODE
- * @exception IllegalArgumentException if the parameter is not supported
+ * @exception UnknownParameterException if the parameter is not supported
*/
- public void setParameterStep(final String parameter, final double hP) {
+ public void setParameterStep(final String parameter, final double hP)
+ throws UnknownParameterException {
for (ParameterConfiguration param: selectedParameters) {
if (parameter.equals(param.getParameterName())) {
@@ -218,7 +222,7 @@ public class JacobianMatrices {
}
}
- throw new MathIllegalArgumentException(LocalizedFormats.UNKNOWN_PARAMETER, parameter);
+ throw new UnknownParameterException(parameter);
}
@@ -257,10 +261,11 @@ public class JacobianMatrices {
* </p>
* @param pName parameter name
* @param dYdP initial Jacobian column vector with respect to the parameter
- * @exception MathIllegalArgumentException if a parameter is not supported
+ * @exception UnknownParameterException if a parameter is not supported
+ * @throws DimensionMismatchException if the column vector does not match state dimension
*/
public void setInitialParameterJacobian(final String pName, final double[] dYdP)
- throws MathIllegalArgumentException {
+ throws UnknownParameterException, DimensionMismatchException {
// Check dimensions
checkDimension(stateDim, dYdP);
@@ -278,7 +283,7 @@ public class JacobianMatrices {
i += stateDim;
}
- throw new MathIllegalArgumentException(LocalizedFormats.UNKNOWN_PARAMETER, pName);
+ throw new UnknownParameterException(pName);
}
@@ -346,7 +351,8 @@ public class JacobianMatrices {
/** {@inheritDoc} */
public void computeDerivatives(final double t, final double[] y, final double[] yDot,
- final double[] z, final double[] zDot) {
+ final double[] z, final double[] zDot)
+ throws MaxCountExceededException, DimensionMismatchException {
// Lazy initialization
if (dirtyParameter && (paramDim != 0)) {
@@ -382,31 +388,33 @@ public class JacobianMatrices {
int startIndex = stateDim * stateDim;
for (ParameterConfiguration param: selectedParameters) {
boolean found = false;
- for (ParameterJacobianProvider provider: jacobianProviders) {
+ for (int k = 0 ; (!found) && (k < jacobianProviders.size()); ++k) {
+ final ParameterJacobianProvider provider = jacobianProviders.get(k);
if (provider.isSupported(param.getParameterName())) {
try {
- provider.computeParameterJacobian(t, y, yDot, param.getParameterName(), dFdP);
- for (int i = 0; i < stateDim; ++i) {
- final double[] dFdYi = dFdY[i];
- int zIndex = startIndex;
- double s = dFdP[i];
- for (int l = 0; l < stateDim; ++l) {
- s += dFdYi[l] * z[zIndex];
- zIndex++;
- }
- zDot[startIndex + i] = s;
+ provider.computeParameterJacobian(t, y, yDot,
+ param.getParameterName(), dFdP);
+ } catch (UnknownParameterException upe) {
+ // this should never happen as we have check support beforehand
+ throw new MathInternalError(upe);
+ }
+ for (int i = 0; i < stateDim; ++i) {
+ final double[] dFdYi = dFdY[i];
+ int zIndex = startIndex;
+ double s = dFdP[i];
+ for (int l = 0; l < stateDim; ++l) {
+ s += dFdYi[l] * z[zIndex];
+ zIndex++;
}
- startIndex += stateDim;
- found = true;
- break;
- } catch (IllegalArgumentException iae) {
+ zDot[startIndex + i] = s;
}
+ found = true;
}
}
if (! found) {
- throw new MathIllegalArgumentException(LocalizedFormats.UNKNOWN_PARAMETER,
- param);
+ Arrays.fill(zDot, startIndex, startIndex + stateDim, 0.0);
}
+ startIndex += stateDim;
}
}
@@ -428,11 +436,17 @@ public class JacobianMatrices {
* @param ode original ODE problem, without jacobians computation skill
* @param hY step sizes to compute the jacobian df/dy
* @see JacobianMatrices#setMainStateSteps(double[])
+ * @exception DimensionMismatchException if there is a dimension mismatch between
+ * the steps array {@code hY} and the equation dimension
*/
public MainStateJacobianWrapper(final FirstOrderDifferentialEquations ode,
- final double[] hY) {
+ final double[] hY)
+ throws DimensionMismatchException {
this.ode = ode;
this.hY = hY.clone();
+ if (hY.length != ode.getDimension()) {
+ throw new DimensionMismatchException(ode.getDimension(), hY.length);
+ }
}
/** {@inheritDoc} */
@@ -441,13 +455,14 @@ public class JacobianMatrices {
}
/** {@inheritDoc} */
- public void computeDerivatives(double t, double[] y, double[] yDot) {
+ public void computeDerivatives(double t, double[] y, double[] yDot)
+ throws MaxCountExceededException, DimensionMismatchException {
ode.computeDerivatives(t, y, yDot);
}
/** {@inheritDoc} */
- public void computeMainStateJacobian(double t, double[] y, double[] yDot,
- double[][] dFdY) {
+ public void computeMainStateJacobian(double t, double[] y, double[] yDot, double[][] dFdY)
+ throws MaxCountExceededException, DimensionMismatchException {
final int n = ode.getDimension();
final double[] tmpDot = new double[n];
@@ -465,5 +480,18 @@ public class JacobianMatrices {
}
+ /** Special exception for equations mismatch. */
+ public static class MismatchedEquations extends MathIllegalArgumentException {
+
+ /** Serializable UID. */
+ private static final long serialVersionUID = 20120902L;
+
+ /** Simple constructor. */
+ public MismatchedEquations() {
+ super(LocalizedFormats.UNMATCHED_ODE_IN_EXPANDED_SET);
+ }
+
+ }
+
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MainStateJacobianProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MainStateJacobianProvider.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MainStateJacobianProvider.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MainStateJacobianProvider.java Sun Sep 2 14:21:00 2012
@@ -16,6 +16,9 @@
*/
package org.apache.commons.math3.ode;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+
/** Interface expanding {@link FirstOrderDifferentialEquations first order
* differential equations} in order to compute exactly the main state jacobian
* matrix for {@link JacobianMatrices partial derivatives equations}.
@@ -30,7 +33,10 @@ public interface MainStateJacobianProvid
* @param y array containing the current value of the main state vector
* @param yDot array containing the current value of the time derivative of the main state vector
* @param dFdY placeholder array where to put the jacobian matrix of the ODE w.r.t. the main state vector
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
*/
- void computeMainStateJacobian(double t, double[] y, double[] yDot, double[][] dFdY);
+ void computeMainStateJacobian(double t, double[] y, double[] yDot, double[][] dFdY)
+ throws MaxCountExceededException, DimensionMismatchException;
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MultistepIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MultistepIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MultistepIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/MultistepIntegrator.java Sun Sep 2 14:21:00 2012
@@ -17,8 +17,10 @@
package org.apache.commons.math3.ode;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.exception.util.LocalizedFormats;
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.ode.nonstiff.AdaptiveStepsizeIntegrator;
@@ -104,19 +106,21 @@ public abstract class MultistepIntegrato
* integration)
* @param scalAbsoluteTolerance allowed absolute error
* @param scalRelativeTolerance allowed relative error
+ * @exception NumberIsTooSmallException if number of steps is smaller than 2
*/
protected MultistepIntegrator(final String name, final int nSteps,
final int order,
final double minStep, final double maxStep,
final double scalAbsoluteTolerance,
- final double scalRelativeTolerance) {
+ final double scalRelativeTolerance)
+ throws NumberIsTooSmallException {
super(name, minStep, maxStep, scalAbsoluteTolerance, scalRelativeTolerance);
- if (nSteps <= 1) {
- throw new MathIllegalArgumentException(
+ if (nSteps < 2) {
+ throw new NumberIsTooSmallException(
LocalizedFormats.INTEGRATION_METHOD_NEEDS_AT_LEAST_TWO_PREVIOUS_POINTS,
- name);
+ nSteps, 2, true);
}
starter = new DormandPrince853Integrator(minStep, maxStep,
@@ -204,10 +208,14 @@ public abstract class MultistepIntegrato
* @param y0 initial value of the state vector at t0
* @param t target time for the integration
* (can be set to a value smaller than <code>t0</code> for backward integration)
- * @throws MathIllegalStateException if the integrator cannot perform integration
+ * @exception DimensionMismatchException if arrays dimension do not match equations settings
+ * @exception NumberIsTooSmallException if integration step is too small
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception NoBracketingException if the location of an event cannot be bracketed
*/
protected void start(final double t0, final double[] y0, final double t)
- throws MathIllegalStateException {
+ throws DimensionMismatchException, NumberIsTooSmallException,
+ MaxCountExceededException, NoBracketingException {
// make sure NO user event nor user step handler is triggered,
// this is the task of the top level integrator, not the task
@@ -335,7 +343,8 @@ public abstract class MultistepIntegrato
}
/** {@inheritDoc} */
- public void handleStep(StepInterpolator interpolator, boolean isLast) {
+ public void handleStep(StepInterpolator interpolator, boolean isLast)
+ throws MaxCountExceededException {
final double prev = interpolator.getPreviousTime();
final double curr = interpolator.getCurrentTime();
@@ -416,7 +425,8 @@ public abstract class MultistepIntegrato
}
/** {@inheritDoc} */
- public void computeDerivatives(double t, double[] y, double[] dot) {
+ public void computeDerivatives(double t, double[] y, double[] dot)
+ throws MaxCountExceededException, DimensionMismatchException {
MultistepIntegrator.this.computeDerivatives(t, y, dot);
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianProvider.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianProvider.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianProvider.java Sun Sep 2 14:21:00 2012
@@ -16,7 +16,8 @@
*/
package org.apache.commons.math3.ode;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
/** Interface to compute exactly Jacobian matrix for some parameter
* when computing {@link JacobianMatrices partial derivatives equations}.
@@ -27,7 +28,9 @@ import org.apache.commons.math3.exceptio
public interface ParameterJacobianProvider extends Parameterizable {
/** Compute the Jacobian matrix of ODE with respect to one parameter.
- * <p>The parameter must be one given by {@link #getParametersNames()}.</p>
+ * <p>If the parameter does not belong to the collection returned by
+ * {@link #getParametersNames()}, the Jacobian will be set to 0,
+ * but no errors will be triggered.</p>
* @param t current value of the independent <I>time</I> variable
* @param y array containing the current value of the main state vector
* @param yDot array containing the current value of the time derivative
@@ -35,10 +38,12 @@ public interface ParameterJacobianProvid
* @param paramName name of the parameter to consider
* @param dFdP placeholder array where to put the Jacobian matrix of the
* ODE with respect to the parameter
- * @throws MathIllegalArgumentException if the parameter is not supported
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
+ * @exception UnknownParameterException if the parameter is not supported
*/
void computeParameterJacobian(double t, double[] y, double[] yDot,
String paramName, double[] dFdP)
- throws MathIllegalArgumentException;
+ throws DimensionMismatchException, MaxCountExceededException, UnknownParameterException;
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianWrapper.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianWrapper.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianWrapper.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterJacobianWrapper.java Sun Sep 2 14:21:00 2012
@@ -16,10 +16,16 @@
*/
package org.apache.commons.math3.ode;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MathIllegalArgumentException;
+import org.apache.commons.math3.exception.MathInternalError;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+
/** Wrapper class to compute Jacobian matrices by finite differences for ODE
* which do not compute them by themselves.
*
@@ -71,20 +77,30 @@ class ParameterJacobianWrapper implement
/** {@inheritDoc} */
public void computeParameterJacobian(double t, double[] y, double[] yDot,
- String paramName, double[] dFdP) {
+ String paramName, double[] dFdP)
+ throws DimensionMismatchException, MaxCountExceededException {
final int n = fode.getDimension();
- final double[] tmpDot = new double[n];
-
- // compute the jacobian df/dp w.r.t. parameter
- final double p = pode.getParameter(paramName);
- final double hP = hParam.get(paramName);
- pode.setParameter(paramName, p + hP);
- fode.computeDerivatives(t, y, tmpDot);
- for (int i = 0; i < n; ++i) {
- dFdP[i] = (tmpDot[i] - yDot[i]) / hP;
+ if (pode.isSupported(paramName)) {
+ try {
+ final double[] tmpDot = new double[n];
+
+ // compute the jacobian df/dp w.r.t. parameter
+ final double p = pode.getParameter(paramName);
+ final double hP = hParam.get(paramName);
+ pode.setParameter(paramName, p + hP);
+ fode.computeDerivatives(t, y, tmpDot);
+ for (int i = 0; i < n; ++i) {
+ dFdP[i] = (tmpDot[i] - yDot[i]) / hP;
+ }
+ pode.setParameter(paramName, p);
+ } catch (MathIllegalArgumentException miae) {
+ // this should never happen as we have checked the parameter is supported
+ throw new MathInternalError(miae);
+ }
+ } else {
+ Arrays.fill(dFdP, 0, n, 0.0);
}
- pode.setParameter(paramName, p);
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedODE.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedODE.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedODE.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedODE.java Sun Sep 2 14:21:00 2012
@@ -16,6 +16,7 @@
*/
package org.apache.commons.math3.ode;
+
/** Interface to compute by finite difference Jacobian matrix for some parameter
* when computing {@link JacobianMatrices partial derivatives equations}.
*
@@ -28,15 +29,15 @@ public interface ParameterizedODE extend
/** Get parameter value from its name.
* @param name parameter name
* @return parameter value
- * @exception IllegalArgumentException if parameter is not supported
+ * @exception UnknownParameterException if parameter is not supported
*/
- double getParameter(String name) throws IllegalArgumentException;
+ double getParameter(String name) throws UnknownParameterException;
/** Set the value for a given parameter.
* @param name parameter name
* @param value parameter value
- * @exception IllegalArgumentException if parameter is not supported
+ * @exception UnknownParameterException if parameter is not supported
*/
- void setParameter(String name, double value) throws IllegalArgumentException;
+ void setParameter(String name, double value) throws UnknownParameterException;
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedWrapper.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedWrapper.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedWrapper.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedWrapper.java Sun Sep 2 14:21:00 2012
@@ -19,8 +19,8 @@ package org.apache.commons.math3.ode;
import java.util.ArrayList;
import java.util.Collection;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.util.LocalizedFormats;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
/** Wrapper class enabling {@link FirstOrderDifferentialEquations basic simple}
* ODE instances to be used when processing {@link JacobianMatrices}.
@@ -51,8 +51,11 @@ class ParameterizedWrapper implements Pa
* @param t current value of the independent <I>time</I> variable
* @param y array containing the current value of the state vector
* @param yDot placeholder array where to put the time derivative of the state vector
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
*/
- public void computeDerivatives(double t, double[] y, double[] yDot) {
+ public void computeDerivatives(double t, double[] y, double[] yDot)
+ throws MaxCountExceededException, DimensionMismatchException {
fode.computeDerivatives(t, y, yDot);
}
@@ -68,9 +71,9 @@ class ParameterizedWrapper implements Pa
/** {@inheritDoc} */
public double getParameter(String name)
- throws MathIllegalArgumentException {
+ throws UnknownParameterException {
if (!isSupported(name)) {
- throw new MathIllegalArgumentException(LocalizedFormats.UNKNOWN_PARAMETER, name);
+ throw new UnknownParameterException(name);
}
return Double.NaN;
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/SecondaryEquations.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/SecondaryEquations.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/SecondaryEquations.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/SecondaryEquations.java Sun Sep 2 14:21:00 2012
@@ -17,6 +17,9 @@
package org.apache.commons.math3.ode;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+
/**
* This interface allows users to add secondary differential equations to a primary
* set of differential equations.
@@ -49,8 +52,11 @@ public interface SecondaryEquations {
* @param primaryDot array containing the derivative of the primary state vector
* @param secondary array containing the current value of the secondary state vector
* @param secondaryDot placeholder array where to put the derivative of the secondary state vector
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
*/
void computeDerivatives(double t, double[] primary, double[] primaryDot,
- double[] secondary, double[] secondaryDot);
+ double[] secondary, double[] secondaryDot)
+ throws MaxCountExceededException, DimensionMismatchException;
}
Copied: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/UnknownParameterException.java (from r1379974, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedODE.java)
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/UnknownParameterException.java?p2=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/UnknownParameterException.java&p1=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedODE.java&r1=1379974&r2=1379975&rev=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/ParameterizedODE.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/UnknownParameterException.java Sun Sep 2 14:21:00 2012
@@ -16,27 +16,38 @@
*/
package org.apache.commons.math3.ode;
-/** Interface to compute by finite difference Jacobian matrix for some parameter
- * when computing {@link JacobianMatrices partial derivatives equations}.
+import org.apache.commons.math3.exception.MathIllegalArgumentException;
+import org.apache.commons.math3.exception.util.LocalizedFormats;
+
+/**
+ * Exception to be thrown when a parameter is unknown.
*
+ * @since 3.1
* @version $Id$
- * @since 3.0
*/
+public class UnknownParameterException extends MathIllegalArgumentException {
+
+ /** Serializable version Id. */
+ private static final long serialVersionUID = 20120902L;
-public interface ParameterizedODE extends Parameterizable {
+ /** Parameter name. */
+ private final String name;
- /** Get parameter value from its name.
- * @param name parameter name
- * @return parameter value
- * @exception IllegalArgumentException if parameter is not supported
+ /**
+ * Construct an exception from the unknown parameter.
+ *
+ * @param name parameter name.
*/
- double getParameter(String name) throws IllegalArgumentException;
+ public UnknownParameterException(final String name) {
+ super(LocalizedFormats.UNKNOWN_PARAMETER);
+ this.name = name;
+ }
- /** Set the value for a given parameter.
- * @param name parameter name
- * @param value parameter value
- * @exception IllegalArgumentException if parameter is not supported
+ /**
+ * @return the name of the unknown parameter.
*/
- void setParameter(String name, double value) throws IllegalArgumentException;
+ public String getName() {
+ return name;
+ }
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/events/EventState.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/events/EventState.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/events/EventState.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/events/EventState.java Sun Sep 2 14:21:00 2012
@@ -23,8 +23,8 @@ import org.apache.commons.math3.analysis
import org.apache.commons.math3.analysis.solvers.PegasusSolver;
import org.apache.commons.math3.analysis.solvers.UnivariateSolver;
import org.apache.commons.math3.analysis.solvers.UnivariateSolverUtils;
-import org.apache.commons.math3.exception.ConvergenceException;
-import org.apache.commons.math3.ode.events.EventHandler;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
import org.apache.commons.math3.ode.sampling.StepInterpolator;
import org.apache.commons.math3.util.FastMath;
@@ -148,8 +148,11 @@ public class EventState {
/** Reinitialize the beginning of the step.
* @param interpolator valid for the current step
+ * @exception MaxCountExceededException if the interpolator throws one because
+ * the number of functions evaluations is exceeded
*/
- public void reinitializeBegin(final StepInterpolator interpolator) {
+ public void reinitializeBegin(final StepInterpolator interpolator)
+ throws MaxCountExceededException {
t0 = interpolator.getPreviousTime();
interpolator.setInterpolatedTime(t0);
@@ -182,11 +185,14 @@ public class EventState {
* @param interpolator step interpolator for the proposed step
* @return true if the event handler triggers an event before
* the end of the proposed step
- * @exception ConvergenceException if an event cannot be located
+ * @exception MaxCountExceededException if the interpolator throws one because
+ * the number of functions evaluations is exceeded
+ * @exception NoBracketingException if the event cannot be bracketed
*/
public boolean evaluateStep(final StepInterpolator interpolator)
- throws ConvergenceException {
+ throws MaxCountExceededException, NoBracketingException {
+ try {
forward = interpolator.isForward();
final double t1 = interpolator.getCurrentTime();
final double dt = t1 - t0;
@@ -198,9 +204,13 @@ public class EventState {
final double h = dt / n;
final UnivariateFunction f = new UnivariateFunction() {
- public double value(final double t) {
- interpolator.setInterpolatedTime(t);
- return handler.g(t, interpolator.getInterpolatedState());
+ public double value(final double t) throws LocalMaxCountExceededException {
+ try {
+ interpolator.setInterpolatedTime(t);
+ return handler.g(t, interpolator.getInterpolatedState());
+ } catch (MaxCountExceededException mcee) {
+ throw new LocalMaxCountExceededException(mcee);
+ }
}
};
@@ -275,6 +285,10 @@ public class EventState {
pendingEventTime = Double.NaN;
return false;
+ } catch (LocalMaxCountExceededException lmcee) {
+ throw lmcee.getException();
+ }
+
}
/** Get the occurrence time of the event triggered in the current step.
@@ -341,4 +355,29 @@ public class EventState {
}
+ /** Local wrapper to propagate exceptions. */
+ private static class LocalMaxCountExceededException extends RuntimeException {
+
+ /** Serializable UID. */
+ private static final long serialVersionUID = 20120901L;
+
+ /** Wrapped exception. */
+ private final MaxCountExceededException wrapped;
+
+ /** Simple constructor.
+ * @param exception exception to wrap
+ */
+ public LocalMaxCountExceededException(final MaxCountExceededException exception) {
+ wrapped = exception;
+ }
+
+ /** Get the wrapped exception.
+ * @return wrapped exception
+ */
+ public MaxCountExceededException getException() {
+ return wrapped;
+ }
+
+ }
+
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthIntegrator.java Sun Sep 2 14:21:00 2012
@@ -17,8 +17,10 @@
package org.apache.commons.math3.ode.nonstiff;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.ode.ExpandableStatefulODE;
import org.apache.commons.math3.ode.sampling.NordsieckStepInterpolator;
@@ -153,13 +155,13 @@ public class AdamsBashforthIntegrator ex
* be smaller than this
* @param scalAbsoluteTolerance allowed absolute error
* @param scalRelativeTolerance allowed relative error
- * @exception IllegalArgumentException if order is 1 or less
+ * @exception NumberIsTooSmallException if order is 1 or less
*/
public AdamsBashforthIntegrator(final int nSteps,
final double minStep, final double maxStep,
final double scalAbsoluteTolerance,
final double scalRelativeTolerance)
- throws IllegalArgumentException {
+ throws NumberIsTooSmallException {
super(METHOD_NAME, nSteps, nSteps, minStep, maxStep,
scalAbsoluteTolerance, scalRelativeTolerance);
}
@@ -189,7 +191,8 @@ public class AdamsBashforthIntegrator ex
/** {@inheritDoc} */
@Override
public void integrate(final ExpandableStatefulODE equations, final double t)
- throws MathIllegalStateException, MathIllegalArgumentException {
+ throws NumberIsTooSmallException, DimensionMismatchException,
+ MaxCountExceededException, NoBracketingException {
sanityChecks(equations, t);
setEquations(equations);
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsIntegrator.java Sun Sep 2 14:21:00 2012
@@ -17,8 +17,10 @@
package org.apache.commons.math3.ode.nonstiff;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.ode.ExpandableStatefulODE;
import org.apache.commons.math3.ode.MultistepIntegrator;
@@ -47,13 +49,13 @@ public abstract class AdamsIntegrator ex
* be smaller than this
* @param scalAbsoluteTolerance allowed absolute error
* @param scalRelativeTolerance allowed relative error
- * @exception IllegalArgumentException if order is 1 or less
+ * @exception NumberIsTooSmallException if order is 1 or less
*/
public AdamsIntegrator(final String name, final int nSteps, final int order,
final double minStep, final double maxStep,
final double scalAbsoluteTolerance,
final double scalRelativeTolerance)
- throws IllegalArgumentException {
+ throws NumberIsTooSmallException {
super(name, nSteps, order, minStep, maxStep,
scalAbsoluteTolerance, scalRelativeTolerance);
transformer = AdamsNordsieckTransformer.getInstance(nSteps);
@@ -87,7 +89,8 @@ public abstract class AdamsIntegrator ex
/** {@inheritDoc} */
@Override
public abstract void integrate(final ExpandableStatefulODE equations, final double t)
- throws MathIllegalStateException, MathIllegalArgumentException;
+ throws NumberIsTooSmallException, DimensionMismatchException,
+ MaxCountExceededException, NoBracketingException;
/** {@inheritDoc} */
@Override
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonIntegrator.java Sun Sep 2 14:21:00 2012
@@ -19,8 +19,10 @@ package org.apache.commons.math3.ode.non
import java.util.Arrays;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.RealMatrixPreservingVisitor;
import org.apache.commons.math3.ode.ExpandableStatefulODE;
@@ -169,13 +171,13 @@ public class AdamsMoultonIntegrator exte
* be smaller than this
* @param scalAbsoluteTolerance allowed absolute error
* @param scalRelativeTolerance allowed relative error
- * @exception IllegalArgumentException if order is 1 or less
+ * @exception NumberIsTooSmallException if order is 1 or less
*/
public AdamsMoultonIntegrator(final int nSteps,
final double minStep, final double maxStep,
final double scalAbsoluteTolerance,
final double scalRelativeTolerance)
- throws IllegalArgumentException {
+ throws NumberIsTooSmallException {
super(METHOD_NAME, nSteps, nSteps + 1, minStep, maxStep,
scalAbsoluteTolerance, scalRelativeTolerance);
}
@@ -206,7 +208,8 @@ public class AdamsMoultonIntegrator exte
/** {@inheritDoc} */
@Override
public void integrate(final ExpandableStatefulODE equations,final double t)
- throws MathIllegalStateException, MathIllegalArgumentException {
+ throws NumberIsTooSmallException, DimensionMismatchException,
+ MaxCountExceededException, NoBracketingException {
sanityChecks(equations, t);
setEquations(equations);
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdaptiveStepsizeIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdaptiveStepsizeIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdaptiveStepsizeIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/AdaptiveStepsizeIntegrator.java Sun Sep 2 14:21:00 2012
@@ -18,8 +18,8 @@
package org.apache.commons.math3.ode.nonstiff;
import org.apache.commons.math3.exception.DimensionMismatchException;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.exception.util.LocalizedFormats;
import org.apache.commons.math3.ode.AbstractIntegrator;
@@ -242,10 +242,13 @@ public abstract class AdaptiveStepsizeIn
* @param y1 work array for a state vector
* @param yDot1 work array for the first time derivative of y1
* @return first integration step
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
*/
public double initializeStep(final boolean forward, final int order, final double[] scale,
final double t0, final double[] y0, final double[] yDot0,
- final double[] y1, final double[] yDot1) {
+ final double[] y1, final double[] yDot1)
+ throws MaxCountExceededException, DimensionMismatchException {
if (initialStep > 0) {
// use the user provided value
@@ -341,7 +344,8 @@ public abstract class AdaptiveStepsizeIn
/** {@inheritDoc} */
@Override
public abstract void integrate (ExpandableStatefulODE equations, double t)
- throws MathIllegalStateException, MathIllegalArgumentException;
+ throws NumberIsTooSmallException, DimensionMismatchException,
+ MaxCountExceededException, NoBracketingException;
/** {@inheritDoc} */
@Override
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853StepInterpolator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853StepInterpolator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853StepInterpolator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853StepInterpolator.java Sun Sep 2 14:21:00 2012
@@ -21,6 +21,9 @@ import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MathInternalError;
+import org.apache.commons.math3.exception.MaxCountExceededException;
import org.apache.commons.math3.ode.AbstractIntegrator;
import org.apache.commons.math3.ode.EquationsMapper;
import org.apache.commons.math3.ode.sampling.StepInterpolator;
@@ -313,7 +316,8 @@ class DormandPrince853StepInterpolator
/** {@inheritDoc} */
@Override
protected void computeInterpolatedStateAndDerivatives(final double theta,
- final double oneMinusThetaH) {
+ final double oneMinusThetaH)
+ throws MaxCountExceededException {
if (! vectorsInitialized) {
@@ -402,45 +406,49 @@ class DormandPrince853StepInterpolator
/** {@inheritDoc} */
@Override
- protected void doFinalize() {
+ protected void doFinalize() throws MaxCountExceededException {
- if (currentState == null) {
- // we are finalizing an uninitialized instance
- return;
- }
+ try {
+ if (currentState == null) {
+ // we are finalizing an uninitialized instance
+ return;
+ }
- double s;
- final double[] yTmp = new double[currentState.length];
- final double pT = getGlobalPreviousTime();
-
- // k14
- for (int j = 0; j < currentState.length; ++j) {
- s = K14_01 * yDotK[0][j] + K14_06 * yDotK[5][j] + K14_07 * yDotK[6][j] +
- K14_08 * yDotK[7][j] + K14_09 * yDotK[8][j] + K14_10 * yDotK[9][j] +
- K14_11 * yDotK[10][j] + K14_12 * yDotK[11][j] + K14_13 * yDotK[12][j];
- yTmp[j] = currentState[j] + h * s;
- }
- integrator.computeDerivatives(pT + C14 * h, yTmp, yDotKLast[0]);
+ double s;
+ final double[] yTmp = new double[currentState.length];
+ final double pT = getGlobalPreviousTime();
+
+ // k14
+ for (int j = 0; j < currentState.length; ++j) {
+ s = K14_01 * yDotK[0][j] + K14_06 * yDotK[5][j] + K14_07 * yDotK[6][j] +
+ K14_08 * yDotK[7][j] + K14_09 * yDotK[8][j] + K14_10 * yDotK[9][j] +
+ K14_11 * yDotK[10][j] + K14_12 * yDotK[11][j] + K14_13 * yDotK[12][j];
+ yTmp[j] = currentState[j] + h * s;
+ }
+ integrator.computeDerivatives(pT + C14 * h, yTmp, yDotKLast[0]);
- // k15
- for (int j = 0; j < currentState.length; ++j) {
- s = K15_01 * yDotK[0][j] + K15_06 * yDotK[5][j] + K15_07 * yDotK[6][j] +
- K15_08 * yDotK[7][j] + K15_09 * yDotK[8][j] + K15_10 * yDotK[9][j] +
- K15_11 * yDotK[10][j] + K15_12 * yDotK[11][j] + K15_13 * yDotK[12][j] +
- K15_14 * yDotKLast[0][j];
- yTmp[j] = currentState[j] + h * s;
- }
- integrator.computeDerivatives(pT + C15 * h, yTmp, yDotKLast[1]);
+ // k15
+ for (int j = 0; j < currentState.length; ++j) {
+ s = K15_01 * yDotK[0][j] + K15_06 * yDotK[5][j] + K15_07 * yDotK[6][j] +
+ K15_08 * yDotK[7][j] + K15_09 * yDotK[8][j] + K15_10 * yDotK[9][j] +
+ K15_11 * yDotK[10][j] + K15_12 * yDotK[11][j] + K15_13 * yDotK[12][j] +
+ K15_14 * yDotKLast[0][j];
+ yTmp[j] = currentState[j] + h * s;
+ }
+ integrator.computeDerivatives(pT + C15 * h, yTmp, yDotKLast[1]);
- // k16
- for (int j = 0; j < currentState.length; ++j) {
- s = K16_01 * yDotK[0][j] + K16_06 * yDotK[5][j] + K16_07 * yDotK[6][j] +
- K16_08 * yDotK[7][j] + K16_09 * yDotK[8][j] + K16_10 * yDotK[9][j] +
- K16_11 * yDotK[10][j] + K16_12 * yDotK[11][j] + K16_13 * yDotK[12][j] +
- K16_14 * yDotKLast[0][j] + K16_15 * yDotKLast[1][j];
- yTmp[j] = currentState[j] + h * s;
- }
- integrator.computeDerivatives(pT + C16 * h, yTmp, yDotKLast[2]);
+ // k16
+ for (int j = 0; j < currentState.length; ++j) {
+ s = K16_01 * yDotK[0][j] + K16_06 * yDotK[5][j] + K16_07 * yDotK[6][j] +
+ K16_08 * yDotK[7][j] + K16_09 * yDotK[8][j] + K16_10 * yDotK[9][j] +
+ K16_11 * yDotK[10][j] + K16_12 * yDotK[11][j] + K16_13 * yDotK[12][j] +
+ K16_14 * yDotKLast[0][j] + K16_15 * yDotKLast[1][j];
+ yTmp[j] = currentState[j] + h * s;
+ }
+ integrator.computeDerivatives(pT + C16 * h, yTmp, yDotKLast[2]);
+ } catch (DimensionMismatchException dme) {
+ throw new MathInternalError(dme);
+ }
}
@@ -449,8 +457,14 @@ class DormandPrince853StepInterpolator
public void writeExternal(final ObjectOutput out)
throws IOException {
- // save the local attributes
- finalizeStep();
+ try {
+ // save the local attributes
+ finalizeStep();
+ } catch (MaxCountExceededException mcee) {
+ final IOException ioe = new IOException(mcee.getLocalizedMessage());
+ ioe.initCause(mcee);
+ throw ioe;
+ }
final int dimension = (currentState == null) ? -1 : currentState.length;
out.writeInt(dimension);
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java Sun Sep 2 14:21:00 2012
@@ -17,8 +17,10 @@
package org.apache.commons.math3.ode.nonstiff;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.ode.ExpandableStatefulODE;
import org.apache.commons.math3.util.FastMath;
@@ -189,7 +191,8 @@ public abstract class EmbeddedRungeKutta
/** {@inheritDoc} */
@Override
public void integrate(final ExpandableStatefulODE equations, final double t)
- throws MathIllegalStateException, MathIllegalArgumentException {
+ throws NumberIsTooSmallException, DimensionMismatchException,
+ MaxCountExceededException, NoBracketingException {
sanityChecks(equations, t);
setEquations(equations);
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/GraggBulirschStoerIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/GraggBulirschStoerIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/GraggBulirschStoerIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/GraggBulirschStoerIntegrator.java Sun Sep 2 14:21:00 2012
@@ -18,8 +18,10 @@
package org.apache.commons.math3.ode.nonstiff;
import org.apache.commons.math3.analysis.solvers.UnivariateSolver;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.ode.ExpandableStatefulODE;
import org.apache.commons.math3.ode.events.EventHandler;
import org.apache.commons.math3.ode.sampling.AbstractStepInterpolator;
@@ -450,11 +452,14 @@ public class GraggBulirschStoerIntegrato
* @param yTmp placeholder for one state vector
* @return true if computation was done properly,
* false if stability check failed before end of computation
+ * @exception MaxCountExceededException if the number of functions evaluations is exceeded
+ * @exception DimensionMismatchException if arrays dimensions do not match equations settings
*/
private boolean tryStep(final double t0, final double[] y0, final double step, final int k,
final double[] scale, final double[][] f,
final double[] yMiddle, final double[] yEnd,
- final double[] yTmp) {
+ final double[] yTmp)
+ throws MaxCountExceededException, DimensionMismatchException {
final int n = sequence[k];
final double subStep = step / n;
@@ -542,7 +547,8 @@ public class GraggBulirschStoerIntegrato
/** {@inheritDoc} */
@Override
public void integrate(final ExpandableStatefulODE equations, final double t)
- throws MathIllegalStateException, MathIllegalArgumentException {
+ throws NumberIsTooSmallException, DimensionMismatchException,
+ MaxCountExceededException, NoBracketingException {
sanityChecks(equations, t);
setEquations(equations);
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaIntegrator.java?rev=1379975&r1=1379974&r2=1379975&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaIntegrator.java Sun Sep 2 14:21:00 2012
@@ -18,8 +18,10 @@
package org.apache.commons.math3.ode.nonstiff;
-import org.apache.commons.math3.exception.MathIllegalArgumentException;
-import org.apache.commons.math3.exception.MathIllegalStateException;
+import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.MaxCountExceededException;
+import org.apache.commons.math3.exception.NoBracketingException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.ode.AbstractIntegrator;
import org.apache.commons.math3.ode.ExpandableStatefulODE;
import org.apache.commons.math3.util.FastMath;
@@ -91,7 +93,8 @@ public abstract class RungeKuttaIntegrat
/** {@inheritDoc} */
@Override
public void integrate(final ExpandableStatefulODE equations, final double t)
- throws MathIllegalStateException, MathIllegalArgumentException {
+ throws NumberIsTooSmallException, DimensionMismatchException,
+ MaxCountExceededException, NoBracketingException {
sanityChecks(equations, t);
setEquations(equations);