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 2009/07/21 00:01:30 UTC

svn commit: r796040 - /commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java

Author: luc
Date: Mon Jul 20 22:01:30 2009
New Revision: 796040

URL: http://svn.apache.org/viewvc?rev=796040&view=rev
Log:
improved test coverage

Modified:
    commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java?rev=796040&r1=796039&r2=796040&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java Mon Jul 20 22:01:30 2009
@@ -29,7 +29,11 @@
 import org.apache.commons.math.MaxEvaluationsExceededException;
 import org.apache.commons.math.MaxIterationsExceededException;
 import org.apache.commons.math.analysis.MultivariateRealFunction;
+import org.apache.commons.math.analysis.MultivariateVectorialFunction;
+import org.apache.commons.math.linear.Array2DRowRealMatrix;
+import org.apache.commons.math.linear.RealMatrix;
 import org.apache.commons.math.optimization.GoalType;
+import org.apache.commons.math.optimization.LeastSquaresConverter;
 import org.apache.commons.math.optimization.OptimizationException;
 import org.apache.commons.math.optimization.RealPointValuePair;
 import org.apache.commons.math.optimization.SimpleRealPointChecker;
@@ -173,6 +177,86 @@
 
   }
 
+  @Test
+  public void testLeastSquares1()
+  throws FunctionEvaluationException, ConvergenceException {
+
+      final RealMatrix factors =
+          new Array2DRowRealMatrix(new double[][] {
+              { 1.0, 0.0 },
+              { 0.0, 1.0 }
+          }, false);
+      LeastSquaresConverter ls = new LeastSquaresConverter(new MultivariateVectorialFunction() {
+          public double[] value(double[] variables) {
+              return factors.operate(variables);
+          }
+      }, new double[] { 2.0, -3.0 });
+      NelderMead optimizer = new NelderMead();
+      optimizer.setConvergenceChecker(new SimpleScalarValueChecker(-1.0, 1.0e-6));
+      optimizer.setMaxIterations(200);
+      RealPointValuePair optimum =
+          optimizer.optimize(ls, GoalType.MINIMIZE, new double[] { 10.0, 10.0 });
+      assertEquals( 2.0, optimum.getPointRef()[0], 3.0e-5);
+      assertEquals(-3.0, optimum.getPointRef()[1], 4.0e-4);
+      assertTrue(optimizer.getEvaluations() > 60);
+      assertTrue(optimizer.getEvaluations() < 80);
+      assertTrue(optimum.getValue() < 1.0e-6);
+  }
+
+  @Test
+  public void testLeastSquares2()
+  throws FunctionEvaluationException, ConvergenceException {
+
+      final RealMatrix factors =
+          new Array2DRowRealMatrix(new double[][] {
+              { 1.0, 0.0 },
+              { 0.0, 1.0 }
+          }, false);
+      LeastSquaresConverter ls = new LeastSquaresConverter(new MultivariateVectorialFunction() {
+          public double[] value(double[] variables) {
+              return factors.operate(variables);
+          }
+      }, new double[] { 2.0, -3.0 }, new double[] { 10.0, 0.1 });
+      NelderMead optimizer = new NelderMead();
+      optimizer.setConvergenceChecker(new SimpleScalarValueChecker(-1.0, 1.0e-6));
+      optimizer.setMaxIterations(200);
+      RealPointValuePair optimum =
+          optimizer.optimize(ls, GoalType.MINIMIZE, new double[] { 10.0, 10.0 });
+      assertEquals( 2.0, optimum.getPointRef()[0], 5.0e-5);
+      assertEquals(-3.0, optimum.getPointRef()[1], 8.0e-4);
+      assertTrue(optimizer.getEvaluations() > 60);
+      assertTrue(optimizer.getEvaluations() < 80);
+      assertTrue(optimum.getValue() < 1.0e-6);
+  }
+
+  @Test
+  public void testLeastSquares3()
+  throws FunctionEvaluationException, ConvergenceException {
+
+      final RealMatrix factors =
+          new Array2DRowRealMatrix(new double[][] {
+              { 1.0, 0.0 },
+              { 0.0, 1.0 }
+          }, false);
+      LeastSquaresConverter ls = new LeastSquaresConverter(new MultivariateVectorialFunction() {
+          public double[] value(double[] variables) {
+              return factors.operate(variables);
+          }
+      }, new double[] { 2.0, -3.0 }, new Array2DRowRealMatrix(new double [][] {
+          { 1.0, 1.2 }, { 1.2, 2.0 }
+      }));
+      NelderMead optimizer = new NelderMead();
+      optimizer.setConvergenceChecker(new SimpleScalarValueChecker(-1.0, 1.0e-6));
+      optimizer.setMaxIterations(200);
+      RealPointValuePair optimum =
+          optimizer.optimize(ls, GoalType.MINIMIZE, new double[] { 10.0, 10.0 });
+      assertEquals( 2.0, optimum.getPointRef()[0], 2.0e-3);
+      assertEquals(-3.0, optimum.getPointRef()[1], 8.0e-4);
+      assertTrue(optimizer.getEvaluations() > 60);
+      assertTrue(optimizer.getEvaluations() < 80);
+      assertTrue(optimum.getValue() < 1.0e-6);
+  }
+
   @Test(expected = MaxIterationsExceededException.class)
   public void testMaxIterations() throws MathException {
       try {