You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2009/12/27 18:33:38 UTC

svn commit: r894083 - /commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/fitting/CurveFitterTest.java

Author: luc
Date: Sun Dec 27 17:33:37 2009
New Revision: 894083

URL: http://svn.apache.org/viewvc?rev=894083&view=rev
Log:
added tests showing that issues MATH-303 and MATH-304 are both invalid.
Jira: MATH-303, MATH-304

Added:
    commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/fitting/CurveFitterTest.java   (with props)

Added: commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/fitting/CurveFitterTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/fitting/CurveFitterTest.java?rev=894083&view=auto
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/fitting/CurveFitterTest.java (added)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/fitting/CurveFitterTest.java Sun Dec 27 17:33:37 2009
@@ -0,0 +1,91 @@
+// 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.math.optimization.fitting;
+
+import org.apache.commons.math.FunctionEvaluationException;
+import org.apache.commons.math.optimization.OptimizationException;
+import org.apache.commons.math.optimization.general.LevenbergMarquardtOptimizer;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CurveFitterTest {
+
+    @Test
+    public void testMath303()
+        throws OptimizationException, FunctionEvaluationException {
+
+        LevenbergMarquardtOptimizer optimizer = new LevenbergMarquardtOptimizer();
+        CurveFitter fitter = new CurveFitter(optimizer);
+        fitter.addObservedPoint(2.805d, 0.6934785852953367d);
+        fitter.addObservedPoint(2.74333333333333d, 0.6306772025518496d);
+        fitter.addObservedPoint(1.655d, 0.9474675497289684);
+        fitter.addObservedPoint(1.725d, 0.9013594835804194d);
+
+        ParametricRealFunction sif = new SimpleInverseFunction();
+
+        double[] initialguess1 = new double[1];
+        initialguess1[0] = 1.0d;
+        Assert.assertEquals(1, fitter.fit(sif, initialguess1).length);
+
+        double[] initialguess2 = new double[2];
+        initialguess2[0] = 1.0d;
+        initialguess2[1] = .5d;
+        Assert.assertEquals(2, fitter.fit(sif, initialguess2).length);
+
+    }
+
+    @Test
+    public void testMath304()
+        throws OptimizationException, FunctionEvaluationException {
+
+        LevenbergMarquardtOptimizer optimizer = new LevenbergMarquardtOptimizer();
+        CurveFitter fitter = new CurveFitter(optimizer);
+        fitter.addObservedPoint(2.805d, 0.6934785852953367d);
+        fitter.addObservedPoint(2.74333333333333d, 0.6306772025518496d);
+        fitter.addObservedPoint(1.655d, 0.9474675497289684);
+        fitter.addObservedPoint(1.725d, 0.9013594835804194d);
+
+        ParametricRealFunction sif = new SimpleInverseFunction();
+
+        double[] initialguess1 = new double[1];
+        initialguess1[0] = 1.0d;
+        Assert.assertEquals(1.6357215104109237, fitter.fit(sif, initialguess1)[0], 1.0e-14);
+
+        double[] initialguess2 = new double[1];
+        initialguess2[0] = 10.0d;
+        Assert.assertEquals(1.6357215104109237, fitter.fit(sif, initialguess1)[0], 1.0e-14);
+
+    }
+
+    private static class SimpleInverseFunction implements ParametricRealFunction {
+
+        public double value(double x, double[] parameters) {
+            return parameters[0] / x + (parameters.length < 2 ? 0 : parameters[1]);
+        }
+
+        public double[] gradient(double x, double[] doubles) {
+            double[] gradientVector = new double[doubles.length];
+            gradientVector[0] = 1 / x;
+            if (doubles.length >= 2) {
+                gradientVector[1] = 1;
+            }
+            return gradientVector; 
+        }
+    }
+
+}

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

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