You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2018/08/10 13:20:46 UTC

[2/3] [math] for a large number of params, avoid copying array.

for a large number of params, avoid copying array.

also fixes an incorrect javadoc comment.


Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/f90d2926
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/f90d2926
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/f90d2926

Branch: refs/heads/master
Commit: f90d29262b10669d0ac21292314130778411e49e
Parents: eb57d6d
Author: adrian <ad...@aporter.org>
Authored: Thu May 17 13:03:47 2018 -0400
Committer: adrian <ad...@aporter.org>
Committed: Thu Jun 28 14:40:09 2018 -0400

----------------------------------------------------------------------
 ...DifferentiatorMultivariateJacobianFunction.java | 13 ++++++-------
 ...entiatorVectorMultivariateJacobianFunction.java | 17 ++++++++---------
 2 files changed, 14 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-math/blob/f90d2926/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorMultivariateJacobianFunction.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorMultivariateJacobianFunction.java b/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorMultivariateJacobianFunction.java
index 313571d..12ebcf5 100644
--- a/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorMultivariateJacobianFunction.java
+++ b/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorMultivariateJacobianFunction.java
@@ -64,8 +64,9 @@ public class DifferentiatorMultivariateJacobianFunction implements MultivariateJ
      */
     @Override
     public Pair<RealVector, RealMatrix> value(RealVector point) {
+        double[] testArray = point.toArray();
         ArrayRealVector value = new ArrayRealVector(1);
-        value.setEntry(0, function.value(point.toArray()));
+        value.setEntry(0, function.value(testArray));
         RealMatrix jacobian = new Array2DRowRealMatrix(1, point.getDimension());
 
         for(int column = 0; column < point.getDimension(); column++) {
@@ -73,15 +74,13 @@ public class DifferentiatorMultivariateJacobianFunction implements MultivariateJ
             double originalPoint = point.getEntry(column);
             double partialDerivative = getPartialDerivative(testPoint -> {
 
-                point.setEntry(columnFinal, testPoint);
+                testArray[columnFinal] = testPoint;
 
-                double testPointOutput = function.value(point.toArray());
-
-                point.setEntry(columnFinal, originalPoint);  //set it back
-
-                return testPointOutput;
+                return function.value(testArray);
             }, originalPoint);
 
+            testArray[column] = originalPoint; //set it back
+
             jacobian.setEntry(0, column, partialDerivative);
         }
 

http://git-wip-us.apache.org/repos/asf/commons-math/blob/f90d2926/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorVectorMultivariateJacobianFunction.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorVectorMultivariateJacobianFunction.java b/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorVectorMultivariateJacobianFunction.java
index 2f8295a..05e1267 100644
--- a/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorVectorMultivariateJacobianFunction.java
+++ b/src/main/java/org/apache/commons/math4/fitting/leastsquares/DifferentiatorVectorMultivariateJacobianFunction.java
@@ -51,8 +51,8 @@ public class DifferentiatorVectorMultivariateJacobianFunction implements Multiva
      * @param function the function to turn into a jacobian
      * @param differentiator the differentiator to find the derivative
      *
-     * This version that works with MultivariateFunction
-     * @see DifferentiatorVectorMultivariateJacobianFunction for version that works with MultivariateVectorFunction
+     * This version that works with MultivariateVectorFunction
+     * @see DifferentiatorMultivariateJacobianFunction for version that works with MultivariateFunction
      */
     public DifferentiatorVectorMultivariateJacobianFunction(MultivariateVectorFunction function, UnivariateVectorFunctionDifferentiator differentiator) {
         this.function = function;
@@ -64,7 +64,8 @@ public class DifferentiatorVectorMultivariateJacobianFunction implements Multiva
      */
     @Override
     public Pair<RealVector, RealMatrix> value(RealVector point) {
-        RealVector value = new ArrayRealVector(function.value(point.toArray()));
+        double[] testArray = point.toArray();
+        RealVector value = new ArrayRealVector(function.value(testArray));
         RealMatrix jacobian = new Array2DRowRealMatrix(value.getDimension(), point.getDimension());
 
         for(int column = 0; column < point.getDimension(); column++) {
@@ -72,15 +73,13 @@ public class DifferentiatorVectorMultivariateJacobianFunction implements Multiva
             double originalPoint = point.getEntry(column);
             double[] partialDerivatives = getPartialDerivative(testPoint -> {
 
-                point.setEntry(columnFinal, testPoint);
+                testArray[columnFinal] = testPoint;
 
-                double[] testPointValue = function.value(point.toArray());
-
-                point.setEntry(columnFinal, originalPoint);  //set it back
-
-                return testPointValue;
+                return function.value(testArray);
             }, originalPoint);
 
+            testArray[column] = originalPoint; //set it back
+
             jacobian.setColumn(column, partialDerivatives);
         }