Hello.

Le mar. 2 août 2022 à 10:42, Yaqiang Wang <yaqiang.w...@gmail.com> a écrit :
>
> Gilles,
>
> What I gather from the documentation is that the intended purpose is
> > to track the values of some function and all its derivatives when the
> > function is defined programmatically (using the usual arithmetical
> > operators, and generalizations of the functions defined in the "Math"
> > JDK class).  IIUC, one gains automatic access to the derivatives
> > without defining them analytically (only the function need be defined).
> >
>
> Yes, the function is defined programmatically.

Perhaps have a look at
  
https://commons.apache.org/proper/commons-math/commons-math4-legacy/apidocs/org/apache/commons/math4/legacy/analysis/differentiation/GradientFunction.html
The associated unit test could also help figure out how to use
"DerivativeStructure":
    
https://commons.apache.org/proper/commons-math/commons-math4-legacy/xref-test/org/apache/commons/math4/legacy/analysis/differentiation/GradientFunctionTest.html

>
> How is "function" defined here?
> >
>
> "function" is a ParameUnivariateFunction instance which implements
> UnivariateFunction interface with parameters (
> https://github.com/meteoinfo/MeteoInfo/blob/master/meteoinfo-math/src/main/java/org/meteoinfo/math/optimize/ParamUnivariateFunction.java).
> Its is used to wrap the Jython function (
> https://github.com/meteoinfo/MeteoInfo/blob/master/meteoinfo-lab/pylib/mipylib/numeric/optimize/minpack.py#L78-L135
> ).
>
> The test Jython script and result figure from current curve_fit function
> can be found here: http://www.meteothink.org/downloads/temp/curve_fit-1.png
> , http://www.meteothink.org/downloads/temp/curve_fit-2.png,
> http://www.meteothink.org/downloads/temp/curve_fit-3.png.
>
> Your code of gradient method (as below) was also tested with good result (
> http://www.meteothink.org/downloads/temp/curve_fit-4.png). But of course it
> can only work for that specific function.

Sure, but I still can't figure out where the problem is:  Do you want to
implement the fitting using numerical derivatives because the gradient
cannot be expressed simply, or just to save one input (the equivalent
of the code below)?
In the latter case, I believe that "DerivativeStructure" could do it.  But
so should it, with a package that performs symbolic differentiation (?).

>     public double[] gradient(double x, double ... parameters) {
> >         final double a = parameters[0];
> >         final double b = parameters[1];
> >         final double c = parameters[2];
> >         final double[] grad = new double[3];
> >         grad[0] = Math.exp(-b * x);
> >         grad[1] = -a * x * grad[0];
> >         grad[2] = 1;
> >         return grad;
> >     }
> >

Regards,
Gilles

P.S. If you succeed in framing the solution to your problem with
"DrivativeStructure",
       we are interested in documenting it in "SimpleCurveFitter".

>>> [...]

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
For additional commands, e-mail: user-h...@commons.apache.org

Reply via email to