# FuncDesigner

FuncDesigner

FuncDesigner is a computer algebra system (CAS) written in Python + NumPy as an ordinary Python module (thus making it free to combine with any other Python or Python-connected code). That makes it cross-platform (Linux, Windows, Mac OS X etc), with completely free license: BSD. It can be used like just a language of mathematics, possibly with recursive import of variables/formulas from other files.

• Enhances RAD abilities of Python language for developing scientific software, especially for numerical optimization, integration and interpolation, solving systems of linear, non-linear, ordinary differential equations
• Perfectly stacks with NumPy arrays and other Python functions and code, thus you can connect parts of code written in C, Fortran, MATLAB etc and import/export data in formats of text, HDF5, xml/xls, weka arff, mtx, netcdf, MATLAB mat files etc (via numpy.io and scipy.io modules)
• Key feature of the framework is Automatic differentiation (AD) (not to be confused with Numerical differentiation via finite-differences derivatives approximation and symbolic differentiation provided by Maxima, SymPy etc). It seriously benefits some numerical optimization solvers and is capable of using sparse matrices (requires SciPy installed). BTW, commercial tool TOMLAB / MAD for automatic differentiation costs over 4000\$
• You can use Python "for" cycle with FuncDesigner
• If some your functions had been written on other languages (C, Fortran, etc), or are beyond FuncDesigner AD capabilities due to any other reason (has "for"/"while" loops, routines for solving systems of nonlinear, mb differential equations etc), you can define your own oofun with wrapper around the function, and the missing derivatives will be covered up by finite-differences derivatives approximation via DerApproximator
• You can use NumPy-style function dot for matrix multiplication, e.g. myFunc15 = func2 + 2*b + dot(a+c, b+c) + 4. In Python 3.x series (where Unicode is available) a special operator for the operation is expected, thus it will be implemented in FuncDesigner as well.
• You can perform integration (with guaranteed precision by interalg) and interpolation
• You can use operator "ifThenElse" where ordinary Python language operator if-then-else can't deal with condition because it has type oofun (that hasn't been invoked on a point yet and thus preliminary unknown) instead of boolean
If your condition has type boolean when Python loads it (for example when you have "if myOOFun(startPoint)"), then you can use ordinary python if-elif-...-then-else in spite of type of other data involved

• FuncDesigner documentation (also it includes some more optimization examples for LP, MILP, NSP, LLSP etc)
• FuncDesigner linux.softpedia.com entry, wikipedia.org entry
• DerApproximator - finite-differences derivatives approximation
• OpenOpt Factor analysis tool for planning experiment series in physics, chemistry etc
• SpaceFuncs - 2D, 3D, N-dimensional geometric modeling with possibilities of parametrized calculations, numerical optimization and solving systems of geometrical equations

Optimization department of cybernetics institute, National Academy of Sciences of Ukraine
2007-2013