Nonlinear solvers in Dynare

The aim of this project is 1. to separate nonlinear solvers from the problems that they are supposed to solve 1. to provide Matlab and Mex versions of these solvers 1. write Matlab, Mex and C++ version of the problems solved by nonlinear solvers

Existing nonlinear solvers

solve_algo =

  1. Matlab or Octave native version of fsolve(). Note that Matlab and Octave versions of fsolve() are different. (Can't be easily ported to C++)
  2. Newton method with linear search on the entire problem. (As trust region algorithm is superior, not a priority to have a C++ version)
  3. Newton method with linear search on recursive blocks. (As trust region algorithm is superior, not a priority to have a C++ version)
  4. Chris Sims csolve() on entire problem. There exist a C version on Chris's web site.
  5. trust region algorithm on recursive blocks
  6. Newton algorithm with sparse Gaussian elimination (SPE) (Currently only for bytecode)
  7. Newton algorithm with sparge LU solver (Currently only for bytecode)
  8. Newton algorithm with GMRES (Currently only for bytecode)
  9. Newton algorithm with BICGSTAB (Currently only for bytecode)
  10. trust region algorithm on entire problem
  11. mixed complementarity solver

Missing solvers

  1. Simple Newton with dampening factor in order to replace sim1()

Standard problems

  1. steady state (directly solve <fname>_static)

  2. perfect foresight (perfect_foresight_problem.m)
  3. stochastic extended path problem

Provides problems in standard manners

  1. We need Matlab, C and Mex access to <fname>_static and <fname>_dynamic. The format of these functions (Matlab, bytecode or Mex/C) needs to be hidden in a single calling function.

  2. We need Matlab, C and Mex access to perfect foresight problem and stochastic extended path problem (only Matlab exists currently)
  3. The C version is needed to interact with C/C++ version of the solvers. Mex is just a wrapper around the C version.

Exceptions

  1. At least one algorithm can't be handled that way. It is the perfect foresight Newton solver where the number of periods is tested for in each iteration. We should keep its current separate Matlab implementation.