commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gilles Sadowski <gil...@harfang.homelinux.org>
Subject [Math] Old to new API ("MultivariateDifferentiable(Vector)Function")
Date Fri, 30 Nov 2012 16:11:35 GMT
Hello.

Context:
 1. A user application computes the Jacobian of a multivariate vector
    function (the output of a simulation) using finite differences.
 2. The covariance matrix is obtained from "AbstractLeastSquaresOptimizer".
    In the new API, the Jacobian is supposed to be "automatically" computed
    from the "MultivariateDifferentiableVectorFunction" objective function.
 3. The converter from "DifferentiableMultivariateVectorFunction" to
    "MultivariateDifferentiableVectorFunction" (in "FunctionUtils") is
    deprecated.
 4. A "FiniteDifferencesDifferentiator" operator currently exists but only
    for univariate functions.
    Unles I'm mistaken, a direct extension to multiple variables won't do:
     * because the implementation uses the symmetric formula, but in some
       cases (bounded parameter range), it will fail, and
     * because of the floating point representation of real values, the
       delta for sampling the function should depend on the magnitude of
       of the parameter value around which the sampling is done whereas the
       "stepSize" is constant in the implementation.

Questions:
 1. Shouldn't we keep the converters so that users can keep their "home-made"
    (first-order) derivative computations?
    [Converters exist for gradient of "DifferentiableMultivariateFunction"
    and Jacobian of "DifferentiableMultivariateVectorFunction".]
 2. Is it worth creating the multivariate equivalent of the univariate
    "FiniteDifferencesDifferentiator", assuming that higher orders will
    rarely be used because of
     * the loss of accuracy (as stated in the doc), and/or
     * the sometimes prohibitively expensive number of evaluations of the
       objective function? [1]
 3. As current CM optimization algorithms need only the gradient or
    Jacobian, would it be sufficient to only provide a limited (two-points
    first-order) finite differences operator (with the possiblity to choose
    either "symmetric", "forward" or "backward" formula for each parameter)?


Best regards,
Gilles

[1] And this cost is somewhat "hidden" (as the "DerivativeStructure" is
    supposed to provide the derivatives for free, which is not true in this
    case).

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


Mime
View raw message