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 2010/01/28 16:01:56 UTC

svn commit: r904112 - in /commons/proper/math/trunk/src: main/java/org/apache/commons/math/ode/nonstiff/ site/xdoc/ test/java/org/apache/commons/math/ode/nonstiff/

Author: luc
Date: Thu Jan 28 15:01:55 2010
New Revision: 904112

URL: http://svn.apache.org/viewvc?rev=904112&view=rev
Log:
Fixed automatic step initialization in embedded Runge-Kutta integrators.
The relative tolerance setting was never used, only the absolute tolerance was used.
JIRA: MATH-338

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java
    commons/proper/math/trunk/src/site/xdoc/changes.xml
    commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/AdamsMoultonIntegratorTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/DormandPrince853IntegratorTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54IntegratorTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54StepInterpolatorTest.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java?rev=904112&r1=904111&r2=904112&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/ode/nonstiff/EmbeddedRungeKuttaIntegrator.java Thu Jan 28 15:01:55 2010
@@ -17,8 +17,6 @@
 
 package org.apache.commons.math.ode.nonstiff;
 
-import java.util.Arrays;
-
 import org.apache.commons.math.ode.DerivativeException;
 import org.apache.commons.math.ode.FirstOrderDifferentialEquations;
 import org.apache.commons.math.ode.IntegratorException;
@@ -244,13 +242,16 @@
         }
 
         if (firstTime) {
-          final double[] scale;
-          if (vecAbsoluteTolerance != null) {
-            scale = vecAbsoluteTolerance;
-          } else {
-            scale = new double[y0.length];
-            Arrays.fill(scale, scalAbsoluteTolerance);
-          }
+          final double[] scale = new double[y0.length];
+          if (vecAbsoluteTolerance == null) {
+              for (int i = 0; i < scale.length; ++i) {
+                scale[i] = scalAbsoluteTolerance + scalRelativeTolerance * Math.abs(y[i]);
+              }
+            } else {
+              for (int i = 0; i < scale.length; ++i) {
+                scale[i] = vecAbsoluteTolerance[i] + vecRelativeTolerance[i] * Math.abs(y[i]);
+              }
+            }
           hNew = initializeStep(equations, forward, getOrder(), scale,
                                 stepStart, y, yDotK[0], yTmp, yDotK[1]);
           firstTime = false;

Modified: commons/proper/math/trunk/src/site/xdoc/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/site/xdoc/changes.xml?rev=904112&r1=904111&r2=904112&view=diff
==============================================================================
--- commons/proper/math/trunk/src/site/xdoc/changes.xml (original)
+++ commons/proper/math/trunk/src/site/xdoc/changes.xml Thu Jan 28 15:01:55 2010
@@ -39,6 +39,11 @@
   </properties>
   <body>
     <release version="2.1" date="TBD" description="TBD">
+      <action dev="luc" type="fix" issue="MATH-338" due-to="Vincent Morand">
+        Fixed automatic step initialization in embedded Runge-Kutta integrators.
+        The relative tolerance setting was never used, only the absolute tolerance
+        was used.
+      </action>
       <action dev="psteitz" type="fix" issue="MATH-329">
         Fixed regression in Frequency.getPct(Object) introduced in 2.0. Cumulative
         percent was being returned for Object arguments in place of percent.

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/AdamsMoultonIntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/AdamsMoultonIntegratorTest.java?rev=904112&r1=904111&r2=904112&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/AdamsMoultonIntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/AdamsMoultonIntegratorTest.java Thu Jan 28 15:01:55 2010
@@ -145,9 +145,9 @@
             integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                             pb.getFinalTime(), new double[pb.getDimension()]);
             if (nSteps < 4) {
-                assertTrue(integ.getEvaluations() > 150);
+                assertTrue(integ.getEvaluations() > 140);
             } else {
-                assertTrue(integ.getEvaluations() < 100);
+                assertTrue(integ.getEvaluations() < 90);
             }
         }
 

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/DormandPrince853IntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/DormandPrince853IntegratorTest.java?rev=904112&r1=904111&r2=904112&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/DormandPrince853IntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/DormandPrince853IntegratorTest.java Thu Jan 28 15:01:55 2010
@@ -147,8 +147,8 @@
       integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                       pb.getFinalTime(), new double[pb.getDimension()]);
 
-      assertTrue(handler.getLastError() < 8.0e-8);
-      assertTrue(handler.getMaximalValueError() < 2.0e-7);
+      assertTrue(handler.getLastError() < 8.1e-8);
+      assertTrue(handler.getMaximalValueError() < 1.1e-7);
       assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
       assertEquals("Dormand-Prince 8 (5, 3)", integ.getName());
   }

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54IntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54IntegratorTest.java?rev=904112&r1=904111&r2=904112&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54IntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54IntegratorTest.java Thu Jan 28 15:01:55 2010
@@ -387,7 +387,7 @@
         maxError = error;
       }
       if (isLast) {
-        assertTrue(maxError < 4e-11);
+        assertTrue(maxError < 4.2e-11);
         assertTrue(nbSteps < 670);
       }
     }

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54StepInterpolatorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54StepInterpolatorTest.java?rev=904112&r1=904111&r2=904112&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54StepInterpolatorTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/ode/nonstiff/HighamHall54StepInterpolatorTest.java Thu Jan 28 15:01:55 2010
@@ -49,7 +49,7 @@
     HighamHall54Integrator integ = new HighamHall54Integrator(minStep, maxStep,
                                                               scalAbsoluteTolerance,
                                                               scalRelativeTolerance);
-    StepInterpolatorTestUtils.checkDerivativesConsistency(integ, pb, 1.0e-10);
+    StepInterpolatorTestUtils.checkDerivativesConsistency(integ, pb, 1.1e-10);
   }
 
   @Test