Added tests for derivatives consistency. Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/b50f1496 Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/b50f1496 Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/b50f1496
Branch: refs/heads/field-ode Commit: b50f1496eabf27d46d788b49920efa664802715e Parents: 9096002 Author: Luc Maisonobe <l...@apache.org> Authored: Thu Dec 3 18:12:41 2015 +0100 Committer: Luc Maisonobe <l...@apache.org> Committed: Thu Dec 3 18:12:41 2015 +0100 ---------------------------------------------------------------------- .../AbstractRungeKuttaFieldIntegratorTest.java | 11 +++ .../ClassicalRungeKuttaFieldIntegratorTest.java | 5 ++ .../ode/nonstiff/EulerFieldIntegratorTest.java | 5 ++ .../ode/nonstiff/GillFieldIntegratorTest.java | 82 ++++++++++---------- 4 files changed, 62 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-math/blob/b50f1496/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldIntegratorTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldIntegratorTest.java index a97a32d..3c35603 100644 --- a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldIntegratorTest.java +++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldIntegratorTest.java @@ -42,6 +42,7 @@ import org.apache.commons.math3.ode.events.Action; import org.apache.commons.math3.ode.events.FieldEventHandler; import org.apache.commons.math3.ode.sampling.FieldStepHandler; import org.apache.commons.math3.ode.sampling.FieldStepInterpolator; +import org.apache.commons.math3.ode.sampling.StepInterpolatorTestUtils; import org.apache.commons.math3.util.FastMath; import org.apache.commons.math3.util.MathArrays; import org.junit.Assert; @@ -507,4 +508,14 @@ public abstract class AbstractRungeKuttaFieldIntegratorTest { Assert.assertEquals(8.0, result.getState()[0].getReal(), epsilon); } + @Test + public abstract void testDerivativesConsistency(); + + protected <T extends RealFieldElement<T>> void doTestDerivativesConsistency(final Field<T> field, double epsilon) { + TestFieldProblem3<T> pb = new TestFieldProblem3<T>(field); + T step = pb.getFinalTime().subtract(pb.getInitialState().getTime()).multiply(0.001); + RungeKuttaFieldIntegrator<T> integ = createIntegrator(field, step); + StepInterpolatorTestUtils.checkDerivativesConsistency(integ, pb, 1.0e-10); + } + } http://git-wip-us.apache.org/repos/asf/commons-math/blob/b50f1496/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaFieldIntegratorTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaFieldIntegratorTest.java index 1ed3766..3e4d3d7 100644 --- a/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaFieldIntegratorTest.java +++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaFieldIntegratorTest.java @@ -91,4 +91,9 @@ public class ClassicalRungeKuttaFieldIntegratorTest extends AbstractRungeKuttaFi doTestUnstableDerivative(Decimal64Field.getInstance(), 1.0e-12); } + @Test + public void testDerivativesConsistency() { + doTestDerivativesConsistency(Decimal64Field.getInstance(), 1.0e-10); + } + } http://git-wip-us.apache.org/repos/asf/commons-math/blob/b50f1496/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldIntegratorTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldIntegratorTest.java index 2ed42bb..d4334e7 100644 --- a/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldIntegratorTest.java +++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldIntegratorTest.java @@ -92,4 +92,9 @@ public class EulerFieldIntegratorTest extends AbstractRungeKuttaFieldIntegratorT doTestUnstableDerivative(Decimal64Field.getInstance(), 1.0e-12); } + @Test + public void testDerivativesConsistency() { + doTestDerivativesConsistency(Decimal64Field.getInstance(), 1.0e-10); + } + } http://git-wip-us.apache.org/repos/asf/commons-math/blob/b50f1496/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldIntegratorTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldIntegratorTest.java index f820fe7..2aa6278 100644 --- a/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldIntegratorTest.java +++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldIntegratorTest.java @@ -20,12 +20,7 @@ package org.apache.commons.math3.ode.nonstiff; import org.apache.commons.math3.Field; import org.apache.commons.math3.RealFieldElement; -import org.apache.commons.math3.ode.FieldExpandableODE; -import org.apache.commons.math3.ode.FieldODEState; -import org.apache.commons.math3.ode.FieldODEStateAndDerivative; import org.apache.commons.math3.util.Decimal64Field; -import org.apache.commons.math3.util.MathArrays; -import org.junit.Assert; import org.junit.Test; public class GillFieldIntegratorTest extends AbstractRungeKuttaFieldIntegratorTest { @@ -45,55 +40,60 @@ public class GillFieldIntegratorTest extends AbstractRungeKuttaFieldIntegratorTe doTestMissedEndEvent(Decimal64Field.getInstance(), 1.0e-15, 6.0e-5); } - @Test - public void testSanityChecks() { - doTestSanityChecks(Decimal64Field.getInstance()); - } + @Test + public void testSanityChecks() { + doTestSanityChecks(Decimal64Field.getInstance()); + } - @Test - public void testDecreasingSteps() { - doTestDecreasingSteps(Decimal64Field.getInstance(), 1.0, 1.0, 1.0e-10); - } + @Test + public void testDecreasingSteps() { + doTestDecreasingSteps(Decimal64Field.getInstance(), 1.0, 1.0, 1.0e-10); + } - @Test - public void testSmallStep() { - doTestSmallStep(Decimal64Field.getInstance(), 2.0e-13, 4.0e-12, 1.0e-12, "Gill"); - } + @Test + public void testSmallStep() { + doTestSmallStep(Decimal64Field.getInstance(), 2.0e-13, 4.0e-12, 1.0e-12, "Gill"); + } - @Test - public void testBigStep() { - doTestBigStep(Decimal64Field.getInstance(), 0.0004, 0.005, 1.0e-12, "Gill"); + @Test + public void testBigStep() { + doTestBigStep(Decimal64Field.getInstance(), 0.0004, 0.005, 1.0e-12, "Gill"); - } + } - @Test - public void testBackward() { - doTestBackward(Decimal64Field.getInstance(), 5.0e-10, 7.0e-10, 1.0e-12, "Gill"); - } + @Test + public void testBackward() { + doTestBackward(Decimal64Field.getInstance(), 5.0e-10, 7.0e-10, 1.0e-12, "Gill"); + } - @Test - public void testKepler() { - doTestKepler(Decimal64Field.getInstance(), 1.72e-3, 1.0e-5); - } + @Test + public void testKepler() { + doTestKepler(Decimal64Field.getInstance(), 1.72e-3, 1.0e-5); + } - @Test - public void testStepSize() { - doTestStepSize(Decimal64Field.getInstance(), 1.0e-12); - } + @Test + public void testStepSize() { + doTestStepSize(Decimal64Field.getInstance(), 1.0e-12); + } - @Test - public void testSingleStep() { - doTestSingleStep(Decimal64Field.getInstance(), 0.21); - } + @Test + public void testSingleStep() { + doTestSingleStep(Decimal64Field.getInstance(), 0.21); + } - @Test - public void testTooLargeFirstStep() { - doTestTooLargeFirstStep(Decimal64Field.getInstance()); - } + @Test + public void testTooLargeFirstStep() { + doTestTooLargeFirstStep(Decimal64Field.getInstance()); + } @Test public void testUnstableDerivative() { doTestUnstableDerivative(Decimal64Field.getInstance(), 1.0e-12); } + @Test + public void testDerivativesConsistency() { + doTestDerivativesConsistency(Decimal64Field.getInstance(), 1.0e-10); + } + }