[ANN] Gomez - A pure Rust library for solving nonlinear systems of equations

50 points pnevyk

I have just released Gomez - a pure Rust library for solving nonlinear systems of equations.

The goals are:

  • Derivative-free methods so that users don't need to care about providing gradient or Jacobian. Methods that are based on Jacobian use finite difference technique that should be fine in practice.
  • Application in real-world problems. For example, the library supports specifying variable bounds (useful if the variables have some physical meaning for instance). More advanced constraints are currently out of scope, but contributions for their support are welcome.
  • Global convergence. Numerical algorithms are very powerful, but also sensitive to initial guesses. I would like to provide tools for helping to overcome this issue.
  • Control over the process. Solvers implement a low-level, iterative interface (similar to argmin) and should provide many settings to tweak them.
  • Performance.

Supported algorithms in the initial version:

  • Trust region -- This is mostly dogleg method with Levenberg-Marquardt fallback when Jacobian is singular. From simple benchmarks and my experience, it seems to be comparable with GSL hybrids implementation, although I would like to extend the benchmark and fix some todos before making any specific statement.
  • Cuckoo search -- This is a first attempt to help with the sensitivity to initial guesses mentioned above. Basically any global optimization algorithm has a potential to be helpful, but this particular algorithm worked quite well for me in the past.
  • Nelder-Mead (simplex) -- This was just an experiment, not recommended in general.

My main focus in the future will be on the global convergence topic, I have some interesting articles that I want to try.