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/12 10:34:10 UTC

svn commit: r1383845 - in /commons/proper/math/trunk/src: main/java/org/apache/commons/math3/analysis/ test/java/org/apache/commons/math3/analysis/ test/java/org/apache/commons/math3/analysis/solvers/

Author: luc
Date: Wed Sep 12 08:34:10 2012
New Revision: 1383845

URL: http://svn.apache.org/viewvc?rev=1383845&view=rev
Log:
Deprecated DifferentiableUnivariateFunction.

The interface and its implementations should be removed for 4.0. The
remaining uses in the library are only there for compatibility.
Everything else now use the new UnivariateDifferentiableFunction
interface and DerivativeStructure, which allow both arbitrary
differentiation order and arbitrary number of free parameters.

The next step for 3.1 is to replace the multidimensional functions (i.e.
multivariate functions, vector valued functions and matrix valued
functions).

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableUnivariateFunction.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/FunctionUtils.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/FunctionUtilsTest.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/SumSincFunction.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/solvers/BrentSolverTest.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableUnivariateFunction.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableUnivariateFunction.java?rev=1383845&r1=1383844&r2=1383845&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableUnivariateFunction.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/DifferentiableUnivariateFunction.java Wed Sep 12 08:34:10 2012
@@ -20,7 +20,9 @@ package org.apache.commons.math3.analysi
  * Extension of {@link UnivariateFunction} representing a differentiable univariate real function.
  *
  * @version $Id$
+ * @deprecated as of 3.1 replaced by {@link org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction}
  */
+@Deprecated
 public interface DifferentiableUnivariateFunction
     extends UnivariateFunction {
 

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/FunctionUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/FunctionUtils.java?rev=1383845&r1=1383844&r2=1383845&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/FunctionUtils.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/FunctionUtils.java Wed Sep 12 08:34:10 2012
@@ -101,6 +101,7 @@ public class FunctionUtils {
      *
      * @param f List of functions.
      * @return the composite function.
+     * @deprecated as of 3.1 replaced by {@link #compose(UnivariateDifferentiableFunction...)}
      */
     public static DifferentiableUnivariateFunction compose(final DifferentiableUnivariateFunction ... f) {
         return new DifferentiableUnivariateFunction() {
@@ -186,7 +187,9 @@ public class FunctionUtils {
      *
      * @param f List of functions.
      * @return a function that computes the sum of the functions.
+     * @deprecated as of 3.1 replaced by {@link #add(UnivariateDifferentiableFunction...)}
      */
+    @Deprecated
     public static DifferentiableUnivariateFunction add(final DifferentiableUnivariateFunction ... f) {
         return new DifferentiableUnivariateFunction() {
             /** {@inheritDoc} */
@@ -269,6 +272,7 @@ public class FunctionUtils {
      *
      * @param f List of functions.
      * @return a function that computes the product of the functions.
+     * @deprecated as of 3.1 replaced by {@link #multiply(UnivariateDifferentiableFunction...)}
      */
     public static DifferentiableUnivariateFunction multiply(final DifferentiableUnivariateFunction ... f) {
         return new DifferentiableUnivariateFunction() {

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/FunctionUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/FunctionUtilsTest.java?rev=1383845&r1=1383844&r2=1383845&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/FunctionUtilsTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/FunctionUtilsTest.java Wed Sep 12 08:34:10 2012
@@ -17,6 +17,8 @@
 
 package org.apache.commons.math3.analysis;
 
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
+import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
 import org.apache.commons.math3.analysis.function.Add;
 import org.apache.commons.math3.analysis.function.Constant;
 import org.apache.commons.math3.analysis.function.Cos;
@@ -67,27 +69,27 @@ public class FunctionUtilsTest {
 
     @Test
     public void testComposeDifferentiable() {
-        DifferentiableUnivariateFunction id = new Identity();
-        Assert.assertEquals(1, FunctionUtils.compose(id, id, id).derivative().value(3), EPS);
+        UnivariateDifferentiableFunction id = new Identity();
+        Assert.assertEquals(1, FunctionUtils.compose(id, id, id).value(new DerivativeStructure(1, 1, 0, 3)).getPartialDerivative(1), EPS);
 
-        DifferentiableUnivariateFunction c = new Constant(4);
-        Assert.assertEquals(0, FunctionUtils.compose(id, c).derivative().value(3), EPS);
-        Assert.assertEquals(0, FunctionUtils.compose(c, id).derivative().value(3), EPS);
+        UnivariateDifferentiableFunction c = new Constant(4);
+        Assert.assertEquals(0, FunctionUtils.compose(id, c).value(new DerivativeStructure(1, 1, 0, 3)).getPartialDerivative(1), EPS);
+        Assert.assertEquals(0, FunctionUtils.compose(c, id).value(new DerivativeStructure(1, 1, 0, 3)).getPartialDerivative(1), EPS);
 
-        DifferentiableUnivariateFunction m = new Minus();
-        Assert.assertEquals(-1, FunctionUtils.compose(m).derivative().value(3), EPS);
-        Assert.assertEquals(1, FunctionUtils.compose(m, m).derivative().value(3), EPS);
+        UnivariateDifferentiableFunction m = new Minus();
+        Assert.assertEquals(-1, FunctionUtils.compose(m).value(new DerivativeStructure(1, 1, 0, 3)).getPartialDerivative(1), EPS);
+        Assert.assertEquals(1, FunctionUtils.compose(m, m).value(new DerivativeStructure(1, 1, 0, 3)).getPartialDerivative(1), EPS);
 
-        DifferentiableUnivariateFunction inv = new Inverse();
-        Assert.assertEquals(0.25, FunctionUtils.compose(inv, m, id).derivative().value(2), EPS);
+        UnivariateDifferentiableFunction inv = new Inverse();
+        Assert.assertEquals(0.25, FunctionUtils.compose(inv, m, id).value(new DerivativeStructure(1, 1, 0, 2)).getPartialDerivative(1), EPS);
 
-        DifferentiableUnivariateFunction pow = new Power(2);
-        Assert.assertEquals(108, FunctionUtils.compose(pow, pow).derivative().value(3), EPS);
+        UnivariateDifferentiableFunction pow = new Power(2);
+        Assert.assertEquals(108, FunctionUtils.compose(pow, pow).value(new DerivativeStructure(1, 1, 0, 3)).getPartialDerivative(1), EPS);
 
-        DifferentiableUnivariateFunction log = new Log();
+        UnivariateDifferentiableFunction log = new Log();
         double a = 9876.54321;
-        Assert.assertEquals(pow.derivative().value(a) / pow.value(a),
-                            FunctionUtils.compose(log, pow).derivative().value(a), EPS);
+        Assert.assertEquals(pow.value(new DerivativeStructure(1, 1, 0, a)).getPartialDerivative(1) / pow.value(a),
+                            FunctionUtils.compose(log, pow).value(new DerivativeStructure(1, 1, 0, a)).getPartialDerivative(1), EPS);
     }
 
     @Test
@@ -104,14 +106,14 @@ public class FunctionUtilsTest {
 
     @Test
     public void testAddDifferentiable() {
-        DifferentiableUnivariateFunction sin = new Sin();
-        DifferentiableUnivariateFunction c = new Constant(4);
-        DifferentiableUnivariateFunction m = new Minus();
-        DifferentiableUnivariateFunction inv = new Inverse();
+        UnivariateDifferentiableFunction sin = new Sin();
+        UnivariateDifferentiableFunction c = new Constant(4);
+        UnivariateDifferentiableFunction m = new Minus();
+        UnivariateDifferentiableFunction inv = new Inverse();
 
         final double a = 123.456;
         Assert.assertEquals(- 1 / (a * a) -1 + Math.cos(a),
-                            FunctionUtils.add(inv, m, c, sin).derivative().value(a),
+                            FunctionUtils.add(inv, m, c, sin).value(new DerivativeStructure(1, 1, 0, a)).getPartialDerivative(1),
                             EPS);
     }
 
@@ -127,20 +129,20 @@ public class FunctionUtilsTest {
 
     @Test
     public void testMultiplyDifferentiable() {
-        DifferentiableUnivariateFunction c = new Constant(4);
-        DifferentiableUnivariateFunction id = new Identity();
+        UnivariateDifferentiableFunction c = new Constant(4);
+        UnivariateDifferentiableFunction id = new Identity();
         final double a = 1.2345678;
-        Assert.assertEquals(8 * a, FunctionUtils.multiply(c, id, id).derivative().value(a), EPS);
+        Assert.assertEquals(8 * a, FunctionUtils.multiply(c, id, id).value(new DerivativeStructure(1, 1, 0, a)).getPartialDerivative(1), EPS);
 
-        DifferentiableUnivariateFunction inv = new Inverse();
-        DifferentiableUnivariateFunction pow = new Power(2.5);
-        DifferentiableUnivariateFunction cos = new Cos();
+        UnivariateDifferentiableFunction inv = new Inverse();
+        UnivariateDifferentiableFunction pow = new Power(2.5);
+        UnivariateDifferentiableFunction cos = new Cos();
         Assert.assertEquals(1.5 * Math.sqrt(a) * Math.cos(a) - Math.pow(a, 1.5) * Math.sin(a),
-                            FunctionUtils.multiply(inv, pow, cos).derivative().value(a), EPS);
+                            FunctionUtils.multiply(inv, pow, cos).value(new DerivativeStructure(1, 1, 0, a)).getPartialDerivative(1), EPS);
 
-        DifferentiableUnivariateFunction cosh = new Cosh();
+        UnivariateDifferentiableFunction cosh = new Cosh();
         Assert.assertEquals(1.5 * Math.sqrt(a) * Math.cosh(a) + Math.pow(a, 1.5) * Math.sinh(a),
-                            FunctionUtils.multiply(inv, pow, cosh).derivative().value(a), 8 * EPS);
+                            FunctionUtils.multiply(inv, pow, cosh).value(new DerivativeStructure(1, 1, 0, a)).getPartialDerivative(1), 8 * EPS);
     }
 
     @Test

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/SumSincFunction.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/SumSincFunction.java?rev=1383845&r1=1383844&r2=1383845&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/SumSincFunction.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/SumSincFunction.java Wed Sep 12 08:34:10 2012
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.math3.analysis;
 
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
+import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
 import org.apache.commons.math3.analysis.function.Sinc;
 
 /**
@@ -24,8 +26,7 @@ import org.apache.commons.math3.analysis
  * @version $Id$
  */
 public class SumSincFunction implements DifferentiableMultivariateFunction {
-    private static final DifferentiableUnivariateFunction sinc = new Sinc();
-    private static final UnivariateFunction sincDeriv = sinc.derivative();
+    private static final UnivariateDifferentiableFunction sinc = new Sinc();
 
     /**
      * Factor that will multiply each term of the sum.
@@ -59,7 +60,7 @@ public class SumSincFunction implements 
     public MultivariateFunction partialDerivative(final int k) {
         return new MultivariateFunction() {
             public double value(double[] point) {
-                return sincDeriv.value(point[k]);
+                return sinc.value(new DerivativeStructure(1, 1, 0, point[k])).getPartialDerivative(1);
             }
         };
     }
@@ -74,7 +75,7 @@ public class SumSincFunction implements 
                 final double[] r = new double[n];
                 for (int i = 0; i < n; i++) {
                     final double x = point[i];
-                    r[i] = factor * sincDeriv.value(x);
+                    r[i] = factor * sinc.value(new DerivativeStructure(1, 1, 0, x)).getPartialDerivative(1);
                 }
                 return r;
             }

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/solvers/BrentSolverTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/solvers/BrentSolverTest.java?rev=1383845&r1=1383844&r2=1383845&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/solvers/BrentSolverTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/solvers/BrentSolverTest.java Wed Sep 12 08:34:10 2012
@@ -16,11 +16,12 @@
  */
 package org.apache.commons.math3.analysis.solvers;
 
-import org.apache.commons.math3.analysis.DifferentiableUnivariateFunction;
 import org.apache.commons.math3.analysis.FunctionUtils;
 import org.apache.commons.math3.analysis.MonitoredFunction;
 import org.apache.commons.math3.analysis.QuinticFunction;
 import org.apache.commons.math3.analysis.UnivariateFunction;
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
+import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
 import org.apache.commons.math3.analysis.function.Constant;
 import org.apache.commons.math3.analysis.function.Inverse;
 import org.apache.commons.math3.analysis.function.Sin;
@@ -245,28 +246,23 @@ public final class BrentSolverTest {
 
     @Test
     public void testMath832() {
-        final DifferentiableUnivariateFunction f = new DifferentiableUnivariateFunction() {
-                private final DifferentiableUnivariateFunction sqrt = new Sqrt();
-                private final DifferentiableUnivariateFunction inv = new Inverse();
-                private final DifferentiableUnivariateFunction func
+        final UnivariateFunction f = new UnivariateFunction() {
+                private final UnivariateDifferentiableFunction sqrt = new Sqrt();
+                private final UnivariateDifferentiableFunction inv = new Inverse();
+                private final UnivariateDifferentiableFunction func
                     = FunctionUtils.add(FunctionUtils.multiply(new Constant(1e2), sqrt),
                                         FunctionUtils.multiply(new Constant(1e6), inv),
                                         FunctionUtils.multiply(new Constant(1e4),
                                                                FunctionUtils.compose(inv, sqrt)));
 
                 public double value(double x) {
-                    return func.value(x);
+                    return func.value(new DerivativeStructure(1, 1, 0, x)).getPartialDerivative(1);
                 }
 
-                public UnivariateFunction derivative() {
-                    return func.derivative();
-                }
             };
 
         BrentSolver solver = new BrentSolver();
-        final double result = solver.solve(99,
-                                           f.derivative(),
-                                           1, 1e30, 1 + 1e-10);
+        final double result = solver.solve(99, f, 1, 1e30, 1 + 1e-10);
         Assert.assertEquals(804.93558250, result, 1e-8);
     }
 }