Home Install Documentation Problems Tree Applications Forum

Increase your income
via IT outsourcing!
Ukrainian HI-TECH Initiative Ukrainian HI-TECH Initiative


From OpenOpt

Jump to: navigation, search

DerApproximator is a small yet important package for getting/checking derivatives via finite-difference approximation, extracted from OpenOpt framework to be standalone Python module. It is required by FuncDesigner (for obtaining derivatives of oofuns beyond standard set without user-provided routines to yield them directly) and some OpenOpt solvers (when there are some functions without user-supplied derivatives).

  • Requirements for the package (as well as for OpenOpt and FuncDesigner) are NumPy and python-setuptools; OS - any where Python and numpy work (Linux, Windows, Mac OS X etc).
  • If user provides start point of type Python list, it is automatically casted to NumPy array.
  • Functions:
    • get_d1 returns 1st derivatives of a func f : R^n -> R^m (example)
    • get_d2 returns 2nd derivatives of a func f : R^n -> R (example)
    • check_d1 checks user-provided routing for obtaining 1st derivatives of a function
  • Default diffInt is 1.5e-8 for get_d1, check_d1 and 1.5e-4 for get_d2. You can overwrite it by "diffInt" argument. Another one argument is stencil, default value for DerApproximator, FuncDesigner and OpenOpt NSP is 3, for OpenOpt NLP it's 1:
    • stencil = 1: (f(x+diffInt) - f(x)) / diffInt
    • stencil = 2: (f(x+diffInt) - f(x-diffInt)) / (2*diffInt)
    • stencil = 3: (-f(x+2*diffInt) + 8*f(x+diffInt) - 8*f(x-diffInt) + f(x-2*diffInt)) / (12*diffInt)

  • If it turns out that f(x+diffInt) is NaN (not a number) or f(x-diffInt) is NaN or +/- inf, e.g. log or sqrt in zero, then only one side will be involved into calculations. New! since v 0.36: if stencil > 1, then result is obtained as (-3*f(x) + 4*f(x+diffInt) - f(x+2*diffInt))/(2*diffInt) - it yields more exact result. BTW this situation is quite typical for lots of numerical optimization problems, and currently functions approx_fprime and check_grad from scipy.optimize are even more primitive - they have only one stencil and no handling of NaNs.

New! (since v. 0.39): DerApproximator works with PyPy

Made by Dmitrey

See also:

Optimization department of cybernetics institute, National Academy of Sciences of Ukraine
Personal tools
Latest OOSuite 0.5605