commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anxionnat Julien <Julien.Anxion...@cnes.fr>
Subject RE: [math] API proposal for differentiation
Date Tue, 24 Jul 2012 09:51:35 GMT


> > [...]
> > I have to deal with functions like that:
> >
> >     public double[] value (double t) { ... }
> >
> > (The best interface for my subjects would be: public Vector3D value
> (double t) { ... }, but it's not the point now.)
> >
> >
> >>
> >> [...]
> >>
> >
> > I'm sorry, I don't understand how it's gonna be for my function :
> >     value(double t): double[]
> 
> It would simply be
>    RallNumber[] value(RallNumber)

Ok. (I had understood that a RallNumber for vectors was necessary. So I had coded a RallNumber
class with double[] value and double[] firstDerivative.)


> 
> >
> > I just tried to code the interfaces (UnivariateVectorDifferentiable,
> UnivariateVectorDerivative, DifferentialPair,
> UnivariateVectorDifferentiator) and the TwoPointsScheme differentiator.
> 
> We already have all of this in Nabla (up to 8 points scheme and also
> algorithmic forward mode directly from bytecode analysis, for simple
> functions that do not call other functions or store intermediate values
> in fields), so don't worry about this.
> 

I didn't see the interfaces for vector functions, so I coded them in local (just to help me
to understand):
- UnivariateVectorDifferentiable:
    double[] f(double t)
- UnivariateVectorDerivative:
    UnivariateVectorDifferentiable getPrimitive()
    RallNumber[] f(RallNumber t) 
- UnivariateVectorDifferentiator:
    UnivariateVectorDerivative differentiate(UnivariateVectorDifferentiable d)

and a TwoPointsScheme differentiator for vector functions.

Now, everything it's ok for me.

I've just one question :
- Should we have a specific abstract class for finite differences differentiator for vector
functions (called FiniteDifferencesVectorDifferentiator) ?
- OR prefer to implement the UnivariateVectorDifferentiator in the FiniteDifferencesDifferentiator
? and have to code the differentiate method for vectors for the two to eight points schemes
(which interest us) ?


> >
> > If I get your purpose, DifferentialPair has to contain:
> >     - "zero-order": x, f(x)
> >     - first order: f(x), f'(x)
> >     - second order: f'(x), f''(x)
> >     - etc.
> 
> No.
> If we want to go already to more than 1st order, then we need to use an
> extension of Rall numbers. See for example the paper "Doubly Recursive
> Multivariate Automatic Differentiation" by Dan Kalman in 2002
> (<http://www1.math.american.edu/People/kalman/pdffiles/mmgautodiff.pdf>
> )
> 

I'll check this, thanks.

Julien


> We could do this already from the beginning, i.e. our RallNumber class
> would be built with the order and the number of free variables.
> However,
> it would be user responsibility to ensure consistency between free
> variables x and y in a function like f(x, y). User should make sure
> that
> if x is associated with index 0 in one variable, the y is associated
> with a different index, and in both cases the derivation orders are
> equal.
> 
> 
> > => What happens for the zero order (x is a double, not an array of
> double) ?
> 
> Then x is just one variable.
> 
> Luc
> 
> >
> >
> > Regards,
> > Julien
> >
> >

Mime
View raw message