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/14 22:17:01 UTC

svn commit: r1384907 [1/2] - in /commons/proper/math/trunk/src: main/java/org/apache/commons/math3/analysis/ main/java/org/apache/commons/math3/optimization/ main/java/org/apache/commons/math3/optimization/direct/ main/java/org/apache/commons/math3/opt...

Author: luc
Date: Fri Sep 14 20:17:00 2012
New Revision: 1384907

URL: http://svn.apache.org/viewvc?rev=1384907&view=rev
Log:
Use the new differentiation framework in optimization package.

As a temporary hack for backward compatibility, some optimizers do
provide "optimize" methods which accept the new functions signatures
(i.e. MultivariateDifferentiableXxxFunction), but they do *not*
advertise it in their "implements" clause. The reason for that is that
Java forbid implementing a parameterized interface with two different
parameters. These optimizers already implement the interface with the
older functions signatures, and this cannot be removed as of 3.1.

When 4.0 will be started, the old signatures will be removed, and the
"implements" declarations will be updated.

Added:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizer.java
      - copied, changed from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableOptimizer.java
      - copied, changed from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizer.java
      - copied, changed from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorOptimizer.java
      - copied, changed from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractDifferentiableOptimizer.java
      - copied, changed from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractScalarDifferentiableOptimizer.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizerTest.java   (with props)
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizerTest.java   (contents, props changed)
      - copied, changed from r1384905, commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizerTest.java
Removed:
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizerTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizerTest.java
Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateFunction.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateVectorFunction.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateSimpleBoundsOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateVectorOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/fitting/CurveFitter.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractScalarDifferentiableOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/package-info.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerAbstractTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/CircleProblem.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/CircleScalar.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/CircleVectorial.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/LevenbergMarquardtOptimizerTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/MinpackTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/NonLinearConjugateGradientOptimizerTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/RandomCirclePointGenerator.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/StatisticalReferenceDataset.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/StatisticalReferenceDatasetFactory.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/StraightLineProblem.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateFunction.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateFunction.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateFunction.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateFunction.java Fri Sep 14 20:17:00 2012
@@ -22,6 +22,7 @@ package org.apache.commons.math3.analysi
  * multivariate real function.
  * @version $Id$
  * @since 2.0
+ * @deprecated as of 3.1 replaced by {@link org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableFunction}
  */
 public interface DifferentiableMultivariateFunction extends MultivariateFunction {
 

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateVectorFunction.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateVectorFunction.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateVectorFunction.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableMultivariateVectorFunction.java Fri Sep 14 20:17:00 2012
@@ -17,12 +17,12 @@
 
 package org.apache.commons.math3.analysis;
 
-
 /**
  * Extension of {@link MultivariateVectorFunction} representing a differentiable
  * multivariate vectorial function.
  * @version $Id$
  * @since 2.0
+ * @deprecated as of 3.1 replaced by {@link org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableVectorFunction}
  */
 public interface DifferentiableMultivariateVectorFunction
     extends MultivariateVectorFunction {

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateOptimizer.java Fri Sep 14 20:17:00 2012
@@ -25,7 +25,7 @@ import org.apache.commons.math3.analysis
  * the following interfaces:
  * <ul>
  *  <li>{@link org.apache.commons.math3.optimization.MultivariateOptimizer}</li>
- *  <li>{@link org.apache.commons.math3.optimization.DifferentiableMultivariateOptimizer}</li>
+ *  <li>{@link org.apache.commons.math3.optimization.MultivariateDifferentiableOptimizer}</li>
  * </ul>
  *
  * @param <FUNC> Type of the objective function to be optimized.

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateSimpleBoundsOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateSimpleBoundsOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateSimpleBoundsOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseMultivariateSimpleBoundsOptimizer.java Fri Sep 14 20:17:00 2012
@@ -25,7 +25,7 @@ import org.apache.commons.math3.analysis
  * the following interfaces:
  * <ul>
  *  <li>{@link org.apache.commons.math3.optimization.MultivariateOptimizer}</li>
- *  <li>{@link org.apache.commons.math3.optimization.DifferentiableMultivariateOptimizer}</li>
+ *  <li>{@link org.apache.commons.math3.optimization.MultivariateDifferentiableOptimizer}</li>
  * </ul>
  *
  * @param <FUNC> Type of the objective function to be optimized.

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/BaseOptimizer.java Fri Sep 14 20:17:00 2012
@@ -23,8 +23,8 @@ package org.apache.commons.math3.optimiz
  * the following interfaces:
  * <ul>
  *  <li>{@link org.apache.commons.math3.optimization.MultivariateOptimizer}</li>
- *  <li>{@link org.apache.commons.math3.optimization.DifferentiableMultivariateOptimizer}</li>
- *  <li>{@link org.apache.commons.math3.optimization.DifferentiableMultivariateVectorOptimizer}</li>
+ *  <li>{@link org.apache.commons.math3.optimization.MultivariateDifferentiableOptimizer}</li>
+ *  <li>{@link org.apache.commons.math3.optimization.MultivariateDifferentiableVectorOptimizer}</li>
  *  <li>{@link org.apache.commons.math3.optimization.univariate.UnivariateOptimizer}</li>
  * </ul>
  *

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizer.java Fri Sep 14 20:17:00 2012
@@ -30,6 +30,7 @@ import org.apache.commons.math3.random.R
  *
  * @version $Id$
  * @since 2.0
+ * @deprecated as of 3.1 replaced by {@link MultivariateDifferentiableMultiStartOptimizer}
  */
 public class DifferentiableMultivariateMultiStartOptimizer
     extends BaseMultivariateMultiStartOptimizer<DifferentiableMultivariateFunction>
@@ -44,8 +45,8 @@ public class DifferentiableMultivariateM
      * @param generator Random vector generator to use for restarts.
      */
     public DifferentiableMultivariateMultiStartOptimizer(final DifferentiableMultivariateOptimizer optimizer,
-                                                             final int starts,
-                                                             final RandomVectorGenerator generator) {
+                                                         final int starts,
+                                                         final RandomVectorGenerator generator) {
         super(optimizer, starts, generator);
     }
 }

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateOptimizer.java Fri Sep 14 20:17:00 2012
@@ -31,6 +31,8 @@ import org.apache.commons.math3.analysis
  *
  * @version $Id$
  * @since 2.0
+ * @deprecated as of 3.1 replaced by {@link MultivariateDifferentiableOptimizer}
  */
+@Deprecated
 public interface DifferentiableMultivariateOptimizer
     extends BaseMultivariateOptimizer<DifferentiableMultivariateFunction> {}

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizer.java Fri Sep 14 20:17:00 2012
@@ -30,7 +30,9 @@ import org.apache.commons.math3.random.R
  *
  * @version $Id$
  * @since 2.0
+ * @deprecated as of 3.1 replaced by {@link MultivariateDifferentiableVectorMultiStartOptimizer}
  */
+@Deprecated
 public class DifferentiableMultivariateVectorMultiStartOptimizer
     extends BaseMultivariateVectorMultiStartOptimizer<DifferentiableMultivariateVectorFunction>
     implements DifferentiableMultivariateVectorOptimizer {

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorOptimizer.java Fri Sep 14 20:17:00 2012
@@ -26,6 +26,8 @@ import org.apache.commons.math3.analysis
  *
  * @version $Id$
  * @since 3.0
+ * @deprecated as of 3.1 replaced by {@link MultivariateDifferentiableVectorOptimizer}
  */
+@Deprecated
 public interface DifferentiableMultivariateVectorOptimizer
     extends BaseMultivariateVectorOptimizer<DifferentiableMultivariateVectorFunction> {}

Copied: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizer.java (from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizer.java)
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizer.java?p2=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizer.java&p1=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizer.java&r1=1384905&r2=1384907&rev=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateMultiStartOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizer.java Fri Sep 14 20:17:00 2012
@@ -17,11 +17,11 @@
 
 package org.apache.commons.math3.optimization;
 
-import org.apache.commons.math3.analysis.DifferentiableMultivariateFunction;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableFunction;
 import org.apache.commons.math3.random.RandomVectorGenerator;
 
 /**
- * Special implementation of the {@link DifferentiableMultivariateOptimizer}
+ * Special implementation of the {@link MultivariateDifferentiableOptimizer}
  * interface adding multi-start features to an existing optimizer.
  *
  * This class wraps a classical optimizer to use it several times in
@@ -29,11 +29,11 @@ import org.apache.commons.math3.random.R
  * into a local extremum when looking for a global one.
  *
  * @version $Id$
- * @since 2.0
+ * @since 3.1
  */
-public class DifferentiableMultivariateMultiStartOptimizer
-    extends BaseMultivariateMultiStartOptimizer<DifferentiableMultivariateFunction>
-    implements DifferentiableMultivariateOptimizer {
+public class MultivariateDifferentiableMultiStartOptimizer
+    extends BaseMultivariateMultiStartOptimizer<MultivariateDifferentiableFunction>
+    implements MultivariateDifferentiableOptimizer {
     /**
      * Create a multi-start optimizer from a single-start optimizer.
      *
@@ -43,9 +43,9 @@ public class DifferentiableMultivariateM
      * equal to 1.
      * @param generator Random vector generator to use for restarts.
      */
-    public DifferentiableMultivariateMultiStartOptimizer(final DifferentiableMultivariateOptimizer optimizer,
-                                                             final int starts,
-                                                             final RandomVectorGenerator generator) {
+    public MultivariateDifferentiableMultiStartOptimizer(final MultivariateDifferentiableOptimizer optimizer,
+                                                         final int starts,
+                                                         final RandomVectorGenerator generator) {
         super(optimizer, starts, generator);
     }
 }

Copied: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableOptimizer.java (from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateOptimizer.java)
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableOptimizer.java?p2=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableOptimizer.java&p1=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateOptimizer.java&r1=1384905&r2=1384907&rev=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableOptimizer.java Fri Sep 14 20:17:00 2012
@@ -17,20 +17,20 @@
 
 package org.apache.commons.math3.optimization;
 
-import org.apache.commons.math3.analysis.DifferentiableMultivariateFunction;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableFunction;
 
 /**
  * This interface represents an optimization algorithm for
- * {@link DifferentiableMultivariateFunction scalar differentiable objective
+ * {@link MultivariateDifferentiableFunction scalar differentiable objective
  * functions}.
  * Optimization algorithms find the input point set that either {@link GoalType
  * maximize or minimize} an objective function.
  *
  * @see MultivariateOptimizer
- * @see DifferentiableMultivariateVectorOptimizer
+ * @see MultivariateDifferentiableVectorOptimizer
  *
  * @version $Id$
- * @since 2.0
+ * @since 3.1
  */
-public interface DifferentiableMultivariateOptimizer
-    extends BaseMultivariateOptimizer<DifferentiableMultivariateFunction> {}
+public interface MultivariateDifferentiableOptimizer
+    extends BaseMultivariateOptimizer<MultivariateDifferentiableFunction> {}

Copied: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizer.java (from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizer.java)
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizer.java?p2=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizer.java&p1=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizer.java&r1=1384905&r2=1384907&rev=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizer.java Fri Sep 14 20:17:00 2012
@@ -17,23 +17,23 @@
 
 package org.apache.commons.math3.optimization;
 
-import org.apache.commons.math3.analysis.DifferentiableMultivariateVectorFunction;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableVectorFunction;
 import org.apache.commons.math3.random.RandomVectorGenerator;
 
 /**
- * Special implementation of the {@link DifferentiableMultivariateVectorOptimizer}
- * interface addind multi-start features to an existing optimizer.
+ * Special implementation of the {@link MultivariateDifferentiableVectorOptimizer}
+ * interface adding multi-start features to an existing optimizer.
  *
  * This class wraps a classical optimizer to use it several times in
  * turn with different starting points in order to avoid being trapped
  * into a local extremum when looking for a global one.
  *
  * @version $Id$
- * @since 2.0
+ * @since 3.1
  */
-public class DifferentiableMultivariateVectorMultiStartOptimizer
-    extends BaseMultivariateVectorMultiStartOptimizer<DifferentiableMultivariateVectorFunction>
-    implements DifferentiableMultivariateVectorOptimizer {
+public class MultivariateDifferentiableVectorMultiStartOptimizer
+    extends BaseMultivariateVectorMultiStartOptimizer<MultivariateDifferentiableVectorFunction>
+    implements MultivariateDifferentiableVectorOptimizer {
     /**
      * Create a multi-start optimizer from a single-start optimizer.
      *
@@ -43,8 +43,8 @@ public class DifferentiableMultivariateV
      * equal to 1.
      * @param generator Random vector generator to use for restarts.
      */
-    public DifferentiableMultivariateVectorMultiStartOptimizer(
-                final DifferentiableMultivariateVectorOptimizer optimizer,
+    public MultivariateDifferentiableVectorMultiStartOptimizer(
+                final MultivariateDifferentiableVectorOptimizer optimizer,
                 final int starts,
                 final RandomVectorGenerator generator) {
         super(optimizer, starts, generator);

Copied: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorOptimizer.java (from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorOptimizer.java)
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorOptimizer.java?p2=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorOptimizer.java&p1=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorOptimizer.java&r1=1384905&r2=1384907&rev=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorOptimizer.java Fri Sep 14 20:17:00 2012
@@ -17,15 +17,15 @@
 
 package org.apache.commons.math3.optimization;
 
-import org.apache.commons.math3.analysis.DifferentiableMultivariateVectorFunction;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableVectorFunction;
 
 /**
  * This interface represents an optimization algorithm for
- * {@link DifferentiableMultivariateVectorFunction vectorial differentiable
+ * {@link MultivariateDifferentiableVectorFunction differentiable vectorial
  * objective functions}.
  *
  * @version $Id$
- * @since 3.0
+ * @since 3.1
  */
-public interface DifferentiableMultivariateVectorOptimizer
-    extends BaseMultivariateVectorOptimizer<DifferentiableMultivariateVectorFunction> {}
+public interface MultivariateDifferentiableVectorOptimizer
+    extends BaseMultivariateVectorOptimizer<MultivariateDifferentiableVectorFunction> {}

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/MultivariateOptimizer.java Fri Sep 14 20:17:00 2012
@@ -25,8 +25,8 @@ import org.apache.commons.math3.analysis
  * <p>Optimization algorithms find the input point set that either {@link GoalType
  * maximize or minimize} an objective function.</p>
  *
- * @see DifferentiableMultivariateOptimizer
- * @see DifferentiableMultivariateVectorOptimizer
+ * @see MultivariateDifferentiableOptimizer
+ * @see MultivariateDifferentiableVectorOptimizer
  * @version $Id$
  * @since 2.0
  */

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateOptimizer.java Fri Sep 14 20:17:00 2012
@@ -102,6 +102,28 @@ public abstract class BaseAbstractMultiv
     /** {@inheritDoc} */
     public PointValuePair optimize(int maxEval, FUNC f, GoalType goalType,
                                        double[] startPoint) {
+        return optimizeInternal(maxEval, f, goalType, startPoint);
+    }
+
+    /**
+     * Optimize an objective function.
+     *
+     * @param f Objective function.
+     * @param goalType Type of optimization goal: either
+     * {@link GoalType#MAXIMIZE} or {@link GoalType#MINIMIZE}.
+     * @param startPoint Start point for optimization.
+     * @param maxEval Maximum number of function evaluations.
+     * @return the point/value pair giving the optimal value for objective
+     * function.
+     * @throws org.apache.commons.math3.exception.DimensionMismatchException
+     * if the start point dimension is wrong.
+     * @throws org.apache.commons.math3.exception.TooManyEvaluationsException
+     * if the maximal number of evaluations is exceeded.
+     * @throws org.apache.commons.math3.exception.NullArgumentException if
+     * any argument is {@code null}.
+     */
+    protected PointValuePair optimizeInternal(int maxEval, MultivariateFunction f, GoalType goalType,
+                                              double[] startPoint) {
         // Checks.
         if (f == null) {
             throw new NullArgumentException();

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateVectorOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateVectorOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateVectorOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BaseAbstractMultivariateVectorOptimizer.java Fri Sep 14 20:17:00 2012
@@ -103,7 +103,33 @@ public abstract class BaseAbstractMultiv
 
     /** {@inheritDoc} */
     public PointVectorValuePair optimize(int maxEval, FUNC f, double[] t, double[] w,
-                                            double[] startPoint) {
+                                         double[] startPoint) {
+        return optimizeInternal(maxEval, f, t, w, startPoint);
+    }
+
+    /**
+     * Optimize an objective function.
+     * Optimization is considered to be a weighted least-squares minimization.
+     * The cost function to be minimized is
+     * <code>&sum;weight<sub>i</sub>(objective<sub>i</sub> - target<sub>i</sub>)<sup>2</sup></code>
+     *
+     * @param f Objective function.
+     * @param target Target value for the objective functions at optimum.
+     * @param weight Weights for the least squares cost computation.
+     * @param startPoint Start point for optimization.
+     * @return the point/value pair giving the optimal value for objective
+     * function.
+     * @param maxEval Maximum number of function evaluations.
+     * @throws org.apache.commons.math3.exception.DimensionMismatchException
+     * if the start point dimension is wrong.
+     * @throws org.apache.commons.math3.exception.TooManyEvaluationsException
+     * if the maximal number of evaluations is exceeded.
+     * @throws org.apache.commons.math3.exception.NullArgumentException if
+     * any argument is {@code null}.
+     */
+    protected PointVectorValuePair optimizeInternal(final int maxEval, final MultivariateVectorFunction f,
+                                                    final double[] t, final double[] w,
+                                                    final double[] startPoint) {
         // Checks.
         if (f == null) {
             throw new NullArgumentException();
@@ -133,6 +159,7 @@ public abstract class BaseAbstractMultiv
 
         // Perform computation.
         return doOptimize();
+
     }
 
     /**

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/fitting/CurveFitter.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/fitting/CurveFitter.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/fitting/CurveFitter.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/fitting/CurveFitter.java Fri Sep 14 20:17:00 2012
@@ -21,9 +21,12 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.math3.analysis.DifferentiableMultivariateVectorFunction;
-import org.apache.commons.math3.analysis.ParametricUnivariateFunction;
 import org.apache.commons.math3.analysis.MultivariateMatrixFunction;
+import org.apache.commons.math3.analysis.ParametricUnivariateFunction;
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableVectorFunction;
 import org.apache.commons.math3.optimization.DifferentiableMultivariateVectorOptimizer;
+import org.apache.commons.math3.optimization.MultivariateDifferentiableVectorOptimizer;
 import org.apache.commons.math3.optimization.PointVectorValuePair;
 
 /** Fitter for parametric univariate real functions y = f(x).
@@ -44,17 +47,37 @@ import org.apache.commons.math3.optimiza
  * @since 2.0
  */
 public class CurveFitter<T extends ParametricUnivariateFunction> {
+
+    /** Optimizer to use for the fitting.
+     * @deprecated as of 3.1 replaced by {@link #optimizer}
+     */
+    @Deprecated
+    private final DifferentiableMultivariateVectorOptimizer oldOptimizer;
+
     /** Optimizer to use for the fitting. */
-    private final DifferentiableMultivariateVectorOptimizer optimizer;
+    private final MultivariateDifferentiableVectorOptimizer optimizer;
+
     /** Observed points. */
     private final List<WeightedObservedPoint> observations;
 
     /** Simple constructor.
      * @param optimizer optimizer to use for the fitting
+     * @deprecated as of 3.1 replaced by {@link #CurveFitter(MultivariateDifferentiableVectorOptimizer)}
      */
     public CurveFitter(final DifferentiableMultivariateVectorOptimizer optimizer) {
-        this.optimizer = optimizer;
-        observations = new ArrayList<WeightedObservedPoint>();
+        this.oldOptimizer = optimizer;
+        this.optimizer    = null;
+        observations      = new ArrayList<WeightedObservedPoint>();
+    }
+
+    /** Simple constructor.
+     * @param optimizer optimizer to use for the fitting
+     * @since 3.1
+     */
+    public CurveFitter(final MultivariateDifferentiableVectorOptimizer optimizer) {
+        this.oldOptimizer = null;
+        this.optimizer    = optimizer;
+        observations      = new ArrayList<WeightedObservedPoint>();
     }
 
     /** Add an observed (x,y) point to the sample with unit weight.
@@ -158,16 +181,23 @@ public class CurveFitter<T extends Param
         }
 
         // perform the fit
-        PointVectorValuePair optimum =
-            optimizer.optimize(maxEval, new TheoreticalValuesFunction(f),
-                               target, weights, initialGuess);
+        final PointVectorValuePair optimum;
+        if (optimizer == null) {
+            // to be removed in 4.0
+            optimum = oldOptimizer.optimize(maxEval, new OldTheoreticalValuesFunction(f),
+                                            target, weights, initialGuess);
+        } else {
+            optimum = optimizer.optimize(maxEval, new TheoreticalValuesFunction(f),
+                                         target, weights, initialGuess);
+        }
 
         // extract the coefficients
         return optimum.getPointRef();
     }
 
     /** Vectorial function computing function theoretical values. */
-    private class TheoreticalValuesFunction
+    @Deprecated
+    private class OldTheoreticalValuesFunction
         implements DifferentiableMultivariateVectorFunction {
         /** Function to fit. */
         private final ParametricUnivariateFunction f;
@@ -175,7 +205,7 @@ public class CurveFitter<T extends Param
         /** Simple constructor.
          * @param f function to fit.
          */
-        public TheoreticalValuesFunction(final ParametricUnivariateFunction f) {
+        public OldTheoreticalValuesFunction(final ParametricUnivariateFunction f) {
             this.f = f;
         }
 
@@ -207,4 +237,60 @@ public class CurveFitter<T extends Param
             return values;
         }
     }
+
+    /** Vectorial function computing function theoretical values. */
+    private class TheoreticalValuesFunction implements MultivariateDifferentiableVectorFunction {
+
+        /** Function to fit. */
+        private final ParametricUnivariateFunction f;
+
+        /** Simple constructor.
+         * @param f function to fit.
+         */
+        public TheoreticalValuesFunction(final ParametricUnivariateFunction f) {
+            this.f = f;
+        }
+
+        /** {@inheritDoc} */
+        public double[] value(double[] point) {
+            // compute the residuals
+            final double[] values = new double[observations.size()];
+            int i = 0;
+            for (WeightedObservedPoint observed : observations) {
+                values[i++] = f.value(observed.getX(), point);
+            }
+
+            return values;
+        }
+
+        /** {@inheritDoc} */
+        public DerivativeStructure[] value(DerivativeStructure[] point) {
+
+            // extract parameters
+            final double[] parameters = new double[point.length];
+            for (int k = 0; k < point.length; ++k) {
+                parameters[k] = point[k].getValue();
+            }
+
+            // compute the residuals
+            final DerivativeStructure[] values = new DerivativeStructure[observations.size()];
+            int i = 0;
+            for (WeightedObservedPoint observed : observations) {
+
+                // build the DerivativeStructure by adding first the value as a constant
+                // and then adding derivatives
+                DerivativeStructure vi = new DerivativeStructure(point.length, 1, f.value(observed.getX(), parameters));
+                for (int k = 0; k < point.length; ++k) {
+                    vi = vi.add(new DerivativeStructure(point.length, 1, k, 0.0));
+                }
+
+                values[i++] = vi;
+
+            }
+
+            return values;
+        }
+
+    }
+
 }

Copied: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractDifferentiableOptimizer.java (from r1384905, commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractScalarDifferentiableOptimizer.java)
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractDifferentiableOptimizer.java?p2=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractDifferentiableOptimizer.java&p1=commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractScalarDifferentiableOptimizer.java&r1=1384905&r2=1384907&rev=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractScalarDifferentiableOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractDifferentiableOptimizer.java Fri Sep 14 20:17:00 2012
@@ -17,11 +17,12 @@
 
 package org.apache.commons.math3.optimization.general;
 
-import org.apache.commons.math3.analysis.DifferentiableMultivariateFunction;
 import org.apache.commons.math3.analysis.MultivariateVectorFunction;
-import org.apache.commons.math3.optimization.DifferentiableMultivariateOptimizer;
-import org.apache.commons.math3.optimization.GoalType;
+import org.apache.commons.math3.analysis.differentiation.GradientFunction;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableFunction;
 import org.apache.commons.math3.optimization.ConvergenceChecker;
+import org.apache.commons.math3.optimization.GoalType;
+import org.apache.commons.math3.optimization.MultivariateDifferentiableOptimizer;
 import org.apache.commons.math3.optimization.PointValuePair;
 import org.apache.commons.math3.optimization.direct.BaseAbstractMultivariateOptimizer;
 
@@ -31,30 +32,21 @@ import org.apache.commons.math3.optimiza
  * It contains boiler-plate code for dealing with gradient evaluation.
  *
  * @version $Id$
- * @since 2.0
+ * @since 3.1
  */
-public abstract class AbstractScalarDifferentiableOptimizer
-    extends BaseAbstractMultivariateOptimizer<DifferentiableMultivariateFunction>
-    implements DifferentiableMultivariateOptimizer {
+public abstract class AbstractDifferentiableOptimizer
+    extends BaseAbstractMultivariateOptimizer<MultivariateDifferentiableFunction>
+    implements MultivariateDifferentiableOptimizer {
+
     /**
      * Objective function gradient.
      */
     private MultivariateVectorFunction gradient;
 
     /**
-     * Simple constructor with default settings.
-     * The convergence check is set to a
-     * {@link org.apache.commons.math3.optimization.SimpleValueChecker
-     * SimpleValueChecker}.
-     * @deprecated See {@link org.apache.commons.math3.optimization.SimpleValueChecker#SimpleValueChecker()}
-     */
-    @Deprecated
-    protected AbstractScalarDifferentiableOptimizer() {}
-
-    /**
      * @param checker Convergence checker.
      */
-    protected AbstractScalarDifferentiableOptimizer(ConvergenceChecker<PointValuePair> checker) {
+    protected AbstractDifferentiableOptimizer(ConvergenceChecker<PointValuePair> checker) {
         super(checker);
     }
 
@@ -63,8 +55,6 @@ public abstract class AbstractScalarDiff
      *
      * @param evaluationPoint Point at which the gradient must be evaluated.
      * @return the gradient at the specified point.
-     * @throws org.apache.commons.math3.exception.TooManyEvaluationsException
-     * if the allowed number of evaluations is exceeded.
      */
     protected double[] computeObjectiveGradient(final double[] evaluationPoint) {
         return gradient.value(evaluationPoint);
@@ -72,13 +62,15 @@ public abstract class AbstractScalarDiff
 
     /** {@inheritDoc} */
     @Override
-    public PointValuePair optimize(int maxEval,
-                                       final DifferentiableMultivariateFunction f,
-                                       final GoalType goalType,
-                                       final double[] startPoint) {
-        // Store optimization problem characteristics.
-        gradient = f.gradient();
+    public PointValuePair optimize(final int maxEval, final MultivariateDifferentiableFunction f,
+                                   final GoalType goalType, final double[] startPoint) {
+
+        // store optimization problem characteristics
+        gradient = new GradientFunction(f);
 
+        // perform optimization
         return super.optimize(maxEval, f, goalType, startPoint);
+
     }
+
 }

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizer.java Fri Sep 14 20:17:00 2012
@@ -21,6 +21,8 @@ import org.apache.commons.math3.exceptio
 import org.apache.commons.math3.exception.DimensionMismatchException;
 import org.apache.commons.math3.analysis.DifferentiableMultivariateVectorFunction;
 import org.apache.commons.math3.analysis.MultivariateMatrixFunction;
+import org.apache.commons.math3.analysis.differentiation.JacobianFunction;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableVectorFunction;
 import org.apache.commons.math3.exception.util.LocalizedFormats;
 import org.apache.commons.math3.linear.QRDecomposition;
 import org.apache.commons.math3.linear.DecompositionSolver;
@@ -36,11 +38,10 @@ import org.apache.commons.math3.util.Fas
  * It handles the boilerplate methods associated to thresholds settings,
  * jacobian and error estimation.
  * <br/>
- * This class uses the {@link DifferentiableMultivariateVectorFunction#jacobian()}
- * of the function argument in method
- * {@link #optimize(int,DifferentiableMultivariateVectorFunction,double[],double[],double[])
+ * This class uses the {@link JacobianFunction Jacobian} of the function argument in method
+ * {@link #optimize(int, MultivariateDifferentiableVectorFunction, double[], double[], double[])
  * optimize} and assumes that, in the matrix returned by the
- * {@link MultivariateMatrixFunction#value(double[]) value} method, the rows
+ * {@link JacobianFunction#value(double[]) value} method, the rows
  * iterate on the model functions while the columns iterate on the parameters; thus,
  * the numbers of rows is equal to the length of the {@code target} array while the
  * number of columns is equal to the length of the {@code startPoint} array.
@@ -292,8 +293,12 @@ public abstract class AbstractLeastSquar
         return sig;
     }
 
-    /** {@inheritDoc} */
+    /** {@inheritDoc}
+     * @deprecated as of 3.1 replaced by {@link #optimize(int,
+     * MultivariateDifferentiableVectorFunction, double[], double[], double[])}
+     */
     @Override
+    @Deprecated
     public PointVectorValuePair optimize(int maxEval,
                                          final DifferentiableMultivariateVectorFunction f,
                                          final double[] target, final double[] weights,
@@ -314,6 +319,51 @@ public abstract class AbstractLeastSquar
 
         cost = Double.POSITIVE_INFINITY;
 
-        return super.optimize(maxEval, f, target, weights, startPoint);
+        return optimizeInternal(maxEval, f, target, weights, startPoint);
+    }
+
+    /**
+     * Optimize an objective function.
+     * Optimization is considered to be a weighted least-squares minimization.
+     * The cost function to be minimized is
+     * <code>&sum;weight<sub>i</sub>(objective<sub>i</sub> - target<sub>i</sub>)<sup>2</sup></code>
+     *
+     * @param f Objective function.
+     * @param target Target value for the objective functions at optimum.
+     * @param weight Weights for the least squares cost computation.
+     * @param startPoint Start point for optimization.
+     * @return the point/value pair giving the optimal value for objective
+     * function.
+     * @param maxEval Maximum number of function evaluations.
+     * @throws org.apache.commons.math3.exception.DimensionMismatchException
+     * if the start point dimension is wrong.
+     * @throws org.apache.commons.math3.exception.TooManyEvaluationsException
+     * if the maximal number of evaluations is exceeded.
+     * @throws org.apache.commons.math3.exception.NullArgumentException if
+     * any argument is {@code null}.
+     */
+    public PointVectorValuePair optimize(final int maxEval,
+                                         final MultivariateDifferentiableVectorFunction f,
+                                         final double[] target, final double[] weights,
+                                         final double[] startPoint) {
+
+        // Reset counter.
+        jacobianEvaluations = 0;
+
+        // Store least squares problem characteristics.
+        jF = new JacobianFunction(f);
+
+        // Arrays shared with the other private methods.
+        point = startPoint.clone();
+        rows = target.length;
+        cols = point.length;
+
+        weightedResidualJacobian = new double[rows][cols];
+        this.weightedResiduals = new double[rows];
+
+        cost = Double.POSITIVE_INFINITY;
+
+        return optimizeInternal(maxEval, f, target, weights, startPoint);
     }
+
 }

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractScalarDifferentiableOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractScalarDifferentiableOptimizer.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractScalarDifferentiableOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/general/AbstractScalarDifferentiableOptimizer.java Fri Sep 14 20:17:00 2012
@@ -19,6 +19,8 @@ package org.apache.commons.math3.optimiz
 
 import org.apache.commons.math3.analysis.DifferentiableMultivariateFunction;
 import org.apache.commons.math3.analysis.MultivariateVectorFunction;
+import org.apache.commons.math3.analysis.differentiation.GradientFunction;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableFunction;
 import org.apache.commons.math3.optimization.DifferentiableMultivariateOptimizer;
 import org.apache.commons.math3.optimization.GoalType;
 import org.apache.commons.math3.optimization.ConvergenceChecker;
@@ -32,7 +34,9 @@ import org.apache.commons.math3.optimiza
  *
  * @version $Id$
  * @since 2.0
+ * @deprecated as of 3.1 replaced by {@link AbstractDifferentiableOptimizer}
  */
+@Deprecated
 public abstract class AbstractScalarDifferentiableOptimizer
     extends BaseAbstractMultivariateOptimizer<DifferentiableMultivariateFunction>
     implements DifferentiableMultivariateOptimizer {
@@ -79,6 +83,33 @@ public abstract class AbstractScalarDiff
         // Store optimization problem characteristics.
         gradient = f.gradient();
 
-        return super.optimize(maxEval, f, goalType, startPoint);
+        return optimizeInternal(maxEval, f, goalType, startPoint);
+    }
+
+    /**
+     * Optimize an objective function.
+     *
+     * @param f Objective function.
+     * @param goalType Type of optimization goal: either
+     * {@link GoalType#MAXIMIZE} or {@link GoalType#MINIMIZE}.
+     * @param startPoint Start point for optimization.
+     * @param maxEval Maximum number of function evaluations.
+     * @return the point/value pair giving the optimal value for objective
+     * function.
+     * @throws org.apache.commons.math3.exception.DimensionMismatchException
+     * if the start point dimension is wrong.
+     * @throws org.apache.commons.math3.exception.TooManyEvaluationsException
+     * if the maximal number of evaluations is exceeded.
+     * @throws org.apache.commons.math3.exception.NullArgumentException if
+     * any argument is {@code null}.
+     */
+    public PointValuePair optimize(final int maxEval,
+                                   final MultivariateDifferentiableFunction f,
+                                   final GoalType goalType,
+                                   final double[] startPoint) {
+        // Store optimization problem characteristics.
+        gradient = new GradientFunction(f);
+
+        return optimizeInternal(maxEval, f, goalType, startPoint);
     }
 }

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/package-info.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/package-info.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/package-info.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/package-info.java Fri Sep 14 20:17:00 2012
@@ -38,13 +38,13 @@
  *  <li>{@link org.apache.commons.math3.optimization.MultivariateOptimizer
  *      MultivariateOptimizer} for {@link org.apache.commons.math3.analysis.MultivariateFunction
  *      multivariate real functions}</li>
- *  <li>{@link org.apache.commons.math3.optimization.DifferentiableMultivariateOptimizer
- *      DifferentiableMultivariateOptimizer} for {@link
- *      org.apache.commons.math3.analysis.DifferentiableMultivariateFunction
+ *  <li>{@link org.apache.commons.math3.optimization.MultivariateDifferentiableOptimizer
+ *      MultivariateDifferentiableOptimizer} for {@link
+ *      org.apache.commons.math3.analysis.MultivariateDifferentiableFunction
  *      differentiable multivariate real functions}</li>
- *  <li>{@link org.apache.commons.math3.optimization.DifferentiableMultivariateVectorOptimizer
- *      DifferentiableMultivariateVectorOptimizer} for {@link
- *      org.apache.commons.math3.analysis.DifferentiableMultivariateVectorFunction
+ *  <li>{@link org.apache.commons.math3.optimization.MultivariateDifferentiableVectorOptimizer
+ *      MultivariateDifferentiableVectorOptimizer} for {@link
+ *      org.apache.commons.math3.analysis.MultivariateDifferentiableVectorFunction
  *      differentiable multivariate vectorial functions}</li>
  * </ul>
  * </p>

Added: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizerTest.java?rev=1384907&view=auto
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizerTest.java (added)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizerTest.java Fri Sep 14 20:17:00 2012
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.math3.optimization;
+
+
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableFunction;
+import org.apache.commons.math3.geometry.euclidean.twod.Vector2D;
+import org.apache.commons.math3.optimization.general.CircleScalar;
+import org.apache.commons.math3.optimization.general.ConjugateGradientFormula;
+import org.apache.commons.math3.optimization.general.NonLinearConjugateGradientOptimizer;
+import org.apache.commons.math3.random.GaussianRandomGenerator;
+import org.apache.commons.math3.random.JDKRandomGenerator;
+import org.apache.commons.math3.random.RandomVectorGenerator;
+import org.apache.commons.math3.random.UncorrelatedRandomVectorGenerator;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MultivariateDifferentiableMultiStartOptimizerTest {
+
+    @Test
+    public void testCircleFitting() {
+        CircleScalar circle = new CircleScalar();
+        circle.addPoint( 30.0,  68.0);
+        circle.addPoint( 50.0,  -6.0);
+        circle.addPoint(110.0, -20.0);
+        circle.addPoint( 35.0,  15.0);
+        circle.addPoint( 45.0,  97.0);
+        // TODO: the wrapper around NonLinearConjugateGradientOptimizer is a temporary hack for
+        // version 3.1 of the library. It should be removed when NonLinearConjugateGradientOptimizer
+        // will officially be declared as implementing MultivariateDifferentiableOptimizer
+        MultivariateDifferentiableOptimizer underlying =
+                new MultivariateDifferentiableOptimizer() {
+
+            private final NonLinearConjugateGradientOptimizer cg =
+                    new NonLinearConjugateGradientOptimizer(ConjugateGradientFormula.POLAK_RIBIERE,
+                                                            new SimpleValueChecker(1.0e-10, 1.0e-10));
+            public PointValuePair optimize(int maxEval,
+                                           MultivariateDifferentiableFunction f,
+                                           GoalType goalType,
+                                           double[] startPoint) {
+                return cg.optimize(maxEval, f, goalType, startPoint);
+            }
+
+            public int getMaxEvaluations() {
+                return cg.getMaxEvaluations();
+            }
+
+            public int getEvaluations() {
+                return cg.getEvaluations();
+            }
+
+            public ConvergenceChecker<PointValuePair> getConvergenceChecker() {
+                return cg.getConvergenceChecker();
+            }
+        };
+        JDKRandomGenerator g = new JDKRandomGenerator();
+        g.setSeed(753289573253l);
+        RandomVectorGenerator generator =
+            new UncorrelatedRandomVectorGenerator(new double[] { 50.0, 50.0 }, new double[] { 10.0, 10.0 },
+                                                  new GaussianRandomGenerator(g));
+        MultivariateDifferentiableMultiStartOptimizer optimizer =
+            new MultivariateDifferentiableMultiStartOptimizer(underlying, 10, generator);
+        PointValuePair optimum =
+            optimizer.optimize(200, circle, GoalType.MINIMIZE, new double[] { 98.680, 47.345 });
+        Assert.assertEquals(200, optimizer.getMaxEvaluations());
+        PointValuePair[] optima = optimizer.getOptima();
+        for (PointValuePair o : optima) {
+            Vector2D center = new Vector2D(o.getPointRef()[0], o.getPointRef()[1]);
+            Assert.assertEquals(69.960161753, circle.getRadius(center), 1.0e-8);
+            Assert.assertEquals(96.075902096, center.getX(), 1.0e-8);
+            Assert.assertEquals(48.135167894, center.getY(), 1.0e-8);
+        }
+        Assert.assertTrue(optimizer.getEvaluations() > 70);
+        Assert.assertTrue(optimizer.getEvaluations() < 90);
+        Assert.assertEquals(3.1267527, optimum.getValue(), 1.0e-8);
+    }
+
+}

Propchange: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableMultiStartOptimizerTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizerTest.java (from r1384905, commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizerTest.java)
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizerTest.java?p2=commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizerTest.java&p1=commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizerTest.java&r1=1384905&r2=1384907&rev=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/DifferentiableMultivariateVectorMultiStartOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizerTest.java Fri Sep 14 20:17:00 2012
@@ -18,8 +18,8 @@
 package org.apache.commons.math3.optimization;
 
 
-import org.apache.commons.math3.analysis.DifferentiableMultivariateVectorFunction;
-import org.apache.commons.math3.analysis.MultivariateMatrixFunction;
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableVectorFunction;
 import org.apache.commons.math3.exception.MathIllegalStateException;
 import org.apache.commons.math3.linear.BlockRealMatrix;
 import org.apache.commons.math3.linear.RealMatrix;
@@ -93,21 +93,47 @@ import org.junit.Test;
  * @author Jorge J. More (original fortran minpack tests)
  * @author Luc Maisonobe (non-minpack tests and minpack tests Java translation)
  */
-public class DifferentiableMultivariateVectorMultiStartOptimizerTest {
+public class MultivariateDifferentiableVectorMultiStartOptimizerTest {
 
     @Test
     public void testTrivial() {
         LinearProblem problem =
             new LinearProblem(new double[][] { { 2 } }, new double[] { 3 });
-        DifferentiableMultivariateVectorOptimizer underlyingOptimizer =
-            new GaussNewtonOptimizer(true,
-                                     new SimpleVectorValueChecker(1.0e-6, 1.0e-6));
+        // TODO: the wrapper around GaussNewtonOptimizer is a temporary hack for
+        // version 3.1 of the library. It should be removed when GaussNewtonOptimizer
+        // will officialy be declared as implementing MultivariateDifferentiableVectorOptimizer
+        MultivariateDifferentiableVectorOptimizer underlyingOptimizer =
+                new MultivariateDifferentiableVectorOptimizer() {
+            private GaussNewtonOptimizer gn =
+                    new GaussNewtonOptimizer(true,
+                                             new SimpleVectorValueChecker(1.0e-6, 1.0e-6));
+
+            public PointVectorValuePair optimize(int maxEval,
+                                                 MultivariateDifferentiableVectorFunction f,
+                                                 double[] target,
+                                                 double[] weight,
+                                                 double[] startPoint) {
+                return gn.optimize(maxEval, f, target, weight, startPoint);
+            }
+
+            public int getMaxEvaluations() {
+                return gn.getMaxEvaluations();
+            }
+
+            public int getEvaluations() {
+                return gn.getEvaluations();
+            }
+
+            public ConvergenceChecker<PointVectorValuePair> getConvergenceChecker() {
+                return gn.getConvergenceChecker();
+            }
+        };
         JDKRandomGenerator g = new JDKRandomGenerator();
         g.setSeed(16069223052l);
         RandomVectorGenerator generator =
             new UncorrelatedRandomVectorGenerator(1, new GaussianRandomGenerator(g));
-        DifferentiableMultivariateVectorMultiStartOptimizer optimizer =
-            new DifferentiableMultivariateVectorMultiStartOptimizer(underlyingOptimizer,
+        MultivariateDifferentiableVectorMultiStartOptimizer optimizer =
+            new MultivariateDifferentiableVectorMultiStartOptimizer(underlyingOptimizer,
                                                                        10, generator);
 
         // no optima before first optimization attempt
@@ -134,23 +160,50 @@ public class DifferentiableMultivariateV
 
     @Test(expected=TestException.class)
     public void testNoOptimum() {
-        DifferentiableMultivariateVectorOptimizer underlyingOptimizer =
-            new GaussNewtonOptimizer(true,
-                                     new SimpleVectorValueChecker(1.0e-6, 1.0e-6));
+
+        // TODO: the wrapper around GaussNewtonOptimizer is a temporary hack for
+        // version 3.1 of the library. It should be removed when GaussNewtonOptimizer
+        // will officialy be declared as implementing MultivariateDifferentiableVectorOptimizer
+        MultivariateDifferentiableVectorOptimizer underlyingOptimizer =
+                new MultivariateDifferentiableVectorOptimizer() {
+            private GaussNewtonOptimizer gn =
+                    new GaussNewtonOptimizer(true,
+                                             new SimpleVectorValueChecker(1.0e-6, 1.0e-6));
+
+            public PointVectorValuePair optimize(int maxEval,
+                                                 MultivariateDifferentiableVectorFunction f,
+                                                 double[] target,
+                                                 double[] weight,
+                                                 double[] startPoint) {
+                return gn.optimize(maxEval, f, target, weight, startPoint);
+            }
+
+            public int getMaxEvaluations() {
+                return gn.getMaxEvaluations();
+            }
+
+            public int getEvaluations() {
+                return gn.getEvaluations();
+            }
+
+            public ConvergenceChecker<PointVectorValuePair> getConvergenceChecker() {
+                return gn.getConvergenceChecker();
+            }
+        };
         JDKRandomGenerator g = new JDKRandomGenerator();
         g.setSeed(12373523445l);
         RandomVectorGenerator generator =
             new UncorrelatedRandomVectorGenerator(1, new GaussianRandomGenerator(g));
-        DifferentiableMultivariateVectorMultiStartOptimizer optimizer =
-            new DifferentiableMultivariateVectorMultiStartOptimizer(underlyingOptimizer,
+        MultivariateDifferentiableVectorMultiStartOptimizer optimizer =
+            new MultivariateDifferentiableVectorMultiStartOptimizer(underlyingOptimizer,
                                                                        10, generator);
-        optimizer.optimize(100, new DifferentiableMultivariateVectorFunction() {
-                public MultivariateMatrixFunction jacobian() {
-                    return null;
-                }
-                public double[] value(double[] point) {
-                    throw new TestException();
-                }
+        optimizer.optimize(100, new MultivariateDifferentiableVectorFunction() {
+            public double[] value(double[] point) {
+                throw new TestException();
+            }
+            public DerivativeStructure[] value(DerivativeStructure[] point) {
+                return point;
+            }
             }, new double[] { 2 }, new double[] { 1 }, new double[] { 0 });
     }
 
@@ -158,7 +211,7 @@ public class DifferentiableMultivariateV
         private static final long serialVersionUID = -7809988995389067683L;
     }
 
-    private static class LinearProblem implements DifferentiableMultivariateVectorFunction {
+    private static class LinearProblem implements MultivariateDifferentiableVectorFunction {
 
         final RealMatrix factors;
         final double[] target;
@@ -171,12 +224,15 @@ public class DifferentiableMultivariateV
             return factors.operate(variables);
         }
 
-        public MultivariateMatrixFunction jacobian() {
-            return new MultivariateMatrixFunction() {
-                public double[][] value(double[] point) {
-                    return factors.getData();
+        public DerivativeStructure[] value(DerivativeStructure[] variables) {
+            DerivativeStructure[] y = new DerivativeStructure[factors.getRowDimension()];
+            for (int i = 0; i < y.length; ++i) {
+                y[i] = variables[0].getField().getZero();
+                for (int j = 0; j < factors.getColumnDimension(); ++j) {
+                    y[i] = y[i].add(variables[j].multiply(factors.getEntry(i, j)));
                 }
-            };
+            }
+            return y;
         }
 
     }

Propchange: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/MultivariateDifferentiableVectorMultiStartOptimizerTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerAbstractTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerAbstractTest.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerAbstractTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerAbstractTest.java Fri Sep 14 20:17:00 2012
@@ -16,16 +16,16 @@
  */
 package org.apache.commons.math3.optimization.general;
 
-import java.awt.geom.Point2D;
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.Arrays;
 
-import org.apache.commons.math3.analysis.DifferentiableMultivariateVectorFunction;
-import org.apache.commons.math3.analysis.MultivariateMatrixFunction;
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableVectorFunction;
 import org.apache.commons.math3.exception.ConvergenceException;
 import org.apache.commons.math3.exception.DimensionMismatchException;
 import org.apache.commons.math3.exception.NumberIsTooSmallException;
+import org.apache.commons.math3.geometry.euclidean.twod.Vector2D;
 import org.apache.commons.math3.linear.BlockRealMatrix;
 import org.apache.commons.math3.linear.RealMatrix;
 import org.apache.commons.math3.optimization.PointVectorValuePair;
@@ -360,10 +360,10 @@ public abstract class AbstractLeastSquar
         Assert.assertTrue(optimizer.getJacobianEvaluations() < 10);
         double rms = optimizer.getRMS();
         Assert.assertEquals(1.768262623567235,  FastMath.sqrt(circle.getN()) * rms,  1.0e-10);
-        Point2D.Double center = new Point2D.Double(optimum.getPointRef()[0], optimum.getPointRef()[1]);
+        Vector2D center = new Vector2D(optimum.getPointRef()[0], optimum.getPointRef()[1]);
         Assert.assertEquals(69.96016176931406, circle.getRadius(center), 1.0e-6);
-        Assert.assertEquals(96.07590211815305, center.x,      1.0e-6);
-        Assert.assertEquals(48.13516790438953, center.y,      1.0e-6);
+        Assert.assertEquals(96.07590211815305, center.getX(),            1.0e-6);
+        Assert.assertEquals(48.13516790438953, center.getY(),            1.0e-6);
         double[][] cov = optimizer.getCovariances();
         Assert.assertEquals(1.839, cov[0][0], 0.001);
         Assert.assertEquals(0.731, cov[0][1], 0.001);
@@ -376,7 +376,7 @@ public abstract class AbstractLeastSquar
         // add perfect measurements and check errors are reduced
         double  r = circle.getRadius(center);
         for (double d= 0; d < 2 * FastMath.PI; d += 0.01) {
-            circle.addPoint(center.x + r * FastMath.cos(d), center.y + r * FastMath.sin(d));
+            circle.addPoint(center.getX() + r * FastMath.cos(d), center.getY() + r * FastMath.sin(d));
         }
         double[] target = new double[circle.getN()];
         Arrays.fill(target, 0.0);
@@ -407,13 +407,13 @@ public abstract class AbstractLeastSquar
         AbstractLeastSquaresOptimizer optimizer = createOptimizer();
         PointVectorValuePair optimum =
             optimizer.optimize(100, circle, target, weights, new double[] { -12, -12 });
-        Point2D.Double center = new Point2D.Double(optimum.getPointRef()[0], optimum.getPointRef()[1]);
+        Vector2D center = new Vector2D(optimum.getPointRef()[0], optimum.getPointRef()[1]);
         Assert.assertTrue(optimizer.getEvaluations() < 25);
         Assert.assertTrue(optimizer.getJacobianEvaluations() < 20);
         Assert.assertEquals( 0.043, optimizer.getRMS(), 1.0e-3);
         Assert.assertEquals( 0.292235,  circle.getRadius(center), 1.0e-6);
-        Assert.assertEquals(-0.151738,  center.x,      1.0e-6);
-        Assert.assertEquals( 0.2075001, center.y,      1.0e-6);
+        Assert.assertEquals(-0.151738,  center.getX(),            1.0e-6);
+        Assert.assertEquals( 0.2075001, center.getY(),            1.0e-6);
     }
 
     @Test
@@ -475,7 +475,7 @@ public abstract class AbstractLeastSquar
 
         final double[][] data = dataset.getData();
         final double[] initial = dataset.getStartingPoint(0);
-        final DifferentiableMultivariateVectorFunction problem;
+        final MultivariateDifferentiableVectorFunction problem;
         problem = dataset.getLeastSquaresProblem();
         final PointVectorValuePair optimum;
         optimum = optimizer.optimize(100, problem, data[1], w, initial);
@@ -504,7 +504,7 @@ public abstract class AbstractLeastSquar
         doTestStRD(StatisticalReferenceDatasetFactory.createHahn1(), 1E-7, 1E-4);
     }
 
-    static class LinearProblem implements DifferentiableMultivariateVectorFunction, Serializable {
+    static class LinearProblem implements MultivariateDifferentiableVectorFunction, Serializable {
 
         private static final long serialVersionUID = 703247177355019415L;
         final RealMatrix factors;
@@ -518,12 +518,17 @@ public abstract class AbstractLeastSquar
             return factors.operate(variables);
         }
 
-        public MultivariateMatrixFunction jacobian() {
-            return new MultivariateMatrixFunction() {
-                public double[][] value(double[] point) {
-                    return factors.getData();
+        public DerivativeStructure[] value(DerivativeStructure[] variables) {
+            DerivativeStructure[] value = new DerivativeStructure[factors.getRowDimension()];
+            for (int i = 0; i < value.length; ++i) {
+                value[i] = variables[0].getField().getZero();
+                for (int j = 0; j < factors.getColumnDimension(); ++j) {
+                    value[i] = value[i].add(variables[j].multiply(factors.getEntry(i, j)));
                 }
-            };
+                
+            }
+            return value;
         }
+
     }
 }

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/AbstractLeastSquaresOptimizerTest.java Fri Sep 14 20:17:00 2012
@@ -92,7 +92,7 @@ public class AbstractLeastSquaresOptimiz
         for (int i = 0; i < sig.length; i++) {
             final double actual = FastMath.sqrt(optimizer.getChiSquare()/dof)*sig[i];
             Assert.assertEquals(dataset.getName() + ", parameter #" + i,
-                                actual, expected[i], 1E-8 * expected[i]);
+                                expected[i], actual, 1.3e-8 * expected[i]);
         }
     }
 }

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/CircleProblem.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/CircleProblem.java?rev=1384907&r1=1384906&r2=1384907&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/CircleProblem.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/general/CircleProblem.java Fri Sep 14 20:17:00 2012
@@ -18,9 +18,10 @@
 package org.apache.commons.math3.optimization.general;
 
 import java.util.ArrayList;
-import org.apache.commons.math3.analysis.DifferentiableMultivariateVectorFunction;
-import org.apache.commons.math3.analysis.MultivariateMatrixFunction;
-import org.apache.commons.math3.util.MathUtils;
+
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
+import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableVectorFunction;
+import org.apache.commons.math3.geometry.euclidean.twod.Vector2D;
 import org.apache.commons.math3.util.FastMath;
 
 /**
@@ -37,52 +38,36 @@ import org.apache.commons.math3.util.Fas
  *   corresponding circle.</li>
  * </ul>
  */
-class CircleProblem implements DifferentiableMultivariateVectorFunction {
+class CircleProblem implements MultivariateDifferentiableVectorFunction {
     /** Cloud of points assumed to be fitted by a circle. */
-    private final ArrayList<double[]> points;
+    private final ArrayList<Vector2D> points;
     /** Error on the x-coordinate of the points. */
     private final double xSigma;
     /** Error on the y-coordinate of the points. */
     private final double ySigma;
-    /** Number of points on the circumference (when searching which
-        model point is closest to a given "observation". */
-    private final int resolution;
 
     /**
      * @param xError Assumed error for the x-coordinate of the circle points.
      * @param yError Assumed error for the y-coordinate of the circle points.
-     * @param searchResolution Number of points to try when searching the one
-     * that is closest to a given "observed" point.
      */
     public CircleProblem(double xError,
-                         double yError,
-                         int searchResolution) {
-        points = new ArrayList<double[]>();
+                         double yError) {
+        points = new ArrayList<Vector2D>();
         xSigma = xError;
         ySigma = yError;
-        resolution = searchResolution;
-    }
-
-    /**
-     * @param xError Assumed error for the x-coordinate of the circle points.
-     * @param yError Assumed error for the y-coordinate of the circle points.
-     */
-    public CircleProblem(double xError,
-                         double yError) {
-        this(xError, yError, 500);
     }
 
-    public void addPoint(double px, double py) {
-        points.add(new double[] { px, py });
+    public void addPoint(Vector2D p) {
+        points.add(p);
     }
 
     public double[] target() {
         final double[] t = new double[points.size() * 2];
         for (int i = 0; i < points.size(); i++) {
-            final double[] p = points.get(i);
+            final Vector2D p = points.get(i);
             final int index = i * 2;
-            t[index] = p[0];
-            t[index + 1] = p[1];
+            t[index]     = p.getX();
+            t[index + 1] = p.getY();
         }
 
         return t;
@@ -108,65 +93,46 @@ class CircleProblem implements Different
 
         final double[] model = new double[points.size() * 2];
 
-        final double deltaTheta = MathUtils.TWO_PI / resolution;
         for (int i = 0; i < points.size(); i++) {
-            final double[] p = points.get(i);
-            final double px = p[0];
-            final double py = p[1];
-
-            double bestX = 0;
-            double bestY = 0;
-            double dMin = Double.POSITIVE_INFINITY;
-
-            // Find the angle for which the circle passes closest to the
-            // current point (using a resolution of 100 points along the
-            // circumference).
-            for (double theta = 0; theta <= MathUtils.TWO_PI; theta += deltaTheta) {
-                final double currentX = cx + r * FastMath.cos(theta);
-                final double currentY = cy + r * FastMath.sin(theta);
-                final double dX = currentX - px;
-                final double dY = currentY - py;
-                final double d = dX * dX + dY * dY;
-                if (d < dMin) {
-                    dMin = d;
-                    bestX = currentX;
-                    bestY = currentY;
-                }
-            }
+            final Vector2D p = points.get(i);
+
+            // Find the circle point closest to the observed point
+            // (observed points are points add through the addPoint method above)
+            final double dX = cx - p.getX();
+            final double dY = cy - p.getY();
+            final double scaling = r / FastMath.hypot(dX, dY);
+            final int index  = i * 2;
+            model[index]     = cx - scaling * dX;
+            model[index + 1] = cy - scaling * dY;
 
-            final int index = i * 2;
-            model[index] = bestX;
-            model[index + 1] = bestY;
         }
 
         return model;
     }
 
-    public MultivariateMatrixFunction jacobian() {
-        return new MultivariateMatrixFunction() {
-            public double[][] value(double[] point) {
-                return jacobian(point);
-            }
-        };
-    }
+    public DerivativeStructure[] value(DerivativeStructure[] params) {
+        final DerivativeStructure cx = params[0];
+        final DerivativeStructure cy = params[1];
+        final DerivativeStructure r = params[2];
 
-    private double[][] jacobian(double[] params) {
-        final double[][] jacobian = new double[points.size() * 2][3];
+        final DerivativeStructure[] model = new DerivativeStructure[points.size() * 2];
 
         for (int i = 0; i < points.size(); i++) {
-            final int index = i * 2;
-            // Partial derivative wrt x-coordinate of center. 
-            jacobian[index][0] = 1;
-            jacobian[index + 1][0] = 0;
-            // Partial derivative wrt y-coordinate of center.
-            jacobian[index][1] = 0;
-            jacobian[index + 1][1] = 1;
-            // Partial derivative wrt radius.
-            final double[] p = points.get(i);
-            jacobian[index][2] = (p[0] - params[0]) / params[2];
-            jacobian[index + 1][2] = (p[1] - params[1]) / params[2];
+            final Vector2D p = points.get(i);
+
+            // Find the circle point closest to the observed point
+            // (observed points are points add through the addPoint method above)
+            final DerivativeStructure dX = cx.subtract(p.getX());
+            final DerivativeStructure dY = cy.subtract(p.getY());
+            final DerivativeStructure scaling = r.divide(dX.multiply(dX).add(dY.multiply(dY)).sqrt());
+            final int index  = i * 2;
+            model[index]     = cx.subtract(scaling.multiply(dX));
+            model[index + 1] = cy.subtract(scaling.multiply(dY));
+
         }
 
-        return jacobian;
+        return model;
+
     }
+
 }