commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Luc Maisonobe <Luc.Maison...@free.fr>
Subject Re: [math] Numerical derivatives in Commons Math
Date Thu, 11 Aug 2011 21:36:05 GMT
Le 11/08/2011 23:27, Fran Lattanzio a écrit :
> Hello,

Hi Fran,

>
> I have a proposal for a numerical derivatives framework for Commons
> Math. I'd like to add the ability to take any UnivariateRealFunction
> and produce another function that represents it's derivative for an
> arbitrary order. Basically, I'm saying add a factory-like interface
> that looks something like the following:
>
> public interface UniverateNumericalDeriver {
>   public UnivariateRealFunction derive(UnivariateRealFunction f, int derivOrder);
> }

This sound interesting. did you have a look at Commons Nabla 
UnivariateDifferentiator interface and its implementations ?

Luc

>
> For an initial implementation of this interface, I propose using
> finite differences - either central, forward, or backward. Computing
> the finite difference coefficients, for any derivative order and any
> error order, is a relatively trivial linear algebra problem. The user
> will simply choose an error order and difference type when setting up
> an FD univariate deriver - everything else will happen automagically.
> You can compute the FD coefficients once the user invokes the function
> in the interface above (might be expensive), and determine an
> appropriate stencil width when they call evaluate(double) on the
> function returned by the aformentioned method - for example, if the
> user has asked for the nth derivative, we simply use the nth root of
> the machine epsilon/double ulp for the stencil width. It would also be
> pretty easy to let the user control this (which might be desirable in
> some cases). Wikipedia has decent article on FDs of all flavors:
> http://en.wikipedia.org/wiki/Finite_difference
>
> There are, of course, many other univariate numerical derivative
> schemes that could be added in the future - using Fourier transforms,
> Barak's adaptive degree polynomial method, etc. These could be added
> later. We could also add the ability to numerically differentiate at
> single point using an arbitrary or user-defined grid (rather than an
> automatically generated one, like above). Barak's method and Fornberg
> finite difference coefficients could be used in this case:
> http://pubs.acs.org/doi/abs/10.1021/ac00113a006
> http://amath.colorado.edu/faculty/fornberg/Docs/MathComp_88_FD_formulas.pdf
>
> It would also make sense to add vectorial and matrix-flavored versions
> of interface above. These interfaces would be slightly more complex,
> but nothing too crazy. Again, the initial implementation would be
> finite differences. This would also be really easy to implement, since
> multivariate FD coefficients are nothing more than an outer product of
> their univariate cousins. The Wikipedia article also has some good
> introductory material on multivariate FDs.
>
> Cheers,
> Fran.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message