You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Phil Steitz (JIRA)" <ji...@apache.org> on 2010/04/14 02:07:51 UTC
[jira] Closed: (MATH-304) CurveFitter.fit(ParametricRealFunction,
double[]) always returns the same value as the initial guess when used with
the LevenbergMarquardtOptimizer
[ https://issues.apache.org/jira/browse/MATH-304?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Phil Steitz closed MATH-304.
----------------------------
> CurveFitter.fit(ParametricRealFunction, double[]) always returns the same value as the initial guess when used with the LevenbergMarquardtOptimizer
> ---------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: MATH-304
> URL: https://issues.apache.org/jira/browse/MATH-304
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 2.0
> Environment: Java, Ubuntu 9.04 (64 bit)
> Reporter: Daren Drummond
> Fix For: 2.1
>
>
> CurveFitter.fit(ParametricRealFunction, double[]) always returns the same value as the initial guess when used with the LevenbergMarquardtOptimizer and the length of the initial guess array is 1. Here is my example code:
> {code:title=CurveFitter with LevenbergMarquardtOptimizer|borderStyle=solid}
> 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);
> SimpleInverseFunction sif = new SimpleInverseFunction(); // Class provided below
> double[] initialguess = new double[1];
> initialguess[0] = 1.0d;
> double[] bestCoefficients = fitter.fit(sif, initialguess); // <---- ALWAYS RETURNS A VALUE OF initialguess !
> /**
> * This is my implementation of ParametricRealFunction
> * Implements y = ax^-1 + b for use with an Apache CurveFitter implementation
> */
> private class SimpleInverseFunction implements ParametricRealFunction
> {
> public double value(double x, double[] doubles) throws FunctionEvaluationException
> {
> //y = ax^-1 + b
> //"double[] must include at least 1 but not more than 2 coefficients."
> if(doubles == null || doubles.length ==0 || doubles.length > 2) throw new FunctionEvaluationException(doubles);
> double a = doubles[0];
> double b = 0;
> if(doubles.length >= 2) b = doubles[1];
> return a * Math.pow(x, -1d) + b;
> }
> public double[] gradient(double x, double[] doubles) throws FunctionEvaluationException
> {
> //derivative: -ax^-2
> //"double[] must include at least 1 but not more than 2 coefficients."
> if(doubles == null || doubles.length ==0 || doubles.length > 2) throw new FunctionEvaluationException(doubles);
> double a = doubles[0];
> double b = 0;
> if(doubles.length >= 2) b = doubles[1];
> double derivative = -a * Math.pow(x, -2d);
> double[]gradientVector = new double[1];
> gradientVector[0] = derivative;
> return gradientVector;
> }
> }
> {code}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira