CasADi
A symbolic framework for numeric optimization that implements forward- and reverse-mode automatic differentiation on sparse matrix-valued computational graphs, usable from C++, Python, MATLAB/Octave, Julia or JavaScript.
CasADi is a symbolic framework for numeric optimization. It implements automatic differentiation in forward and reverse modes over sparse, matrix-valued computational graphs, and supports self-contained C-code generation from those graphs.
It interfaces state-of-the-art numerical solvers such as SUNDIALS and IPOPT, and is commonly used for nonlinear programming, optimal control and parameter estimation problems.
It can be used from C++, Python, MATLAB/Octave, Julia or JavaScript.