# commons-issues mailing list archives

##### Site index · List index
Message view
Top
From "Daren Drummond (JIRA)" <j...@apache.org>
Subject [jira] Created: (MATH-304) CurveFitter.fit(ParametricRealFunction, double[]) always returns the same value as the initial guess when used with the LevenbergMarquardtOptimizer
Date Mon, 19 Oct 2009 21:30:59 GMT
```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

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);
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);
}
}
{code}

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

```
Mime
View raw message