Improved support for solving systems of nonlinear equations
Abstract:
- Scilab's function fsolve computes a root of a system of nonlinear equations. Currently, fsolve is a wrapper around the subroutine HYBRD. HYBRD is well suited to solving systems with dense derivatives, but can not solve large systems with sparse derivatives. I propose to improve the current interface to HYBRD, construct a test set of nonlinear systems with dense and sparse derivatives, and implement an experimental solver for systems of nonlinear equations with sparse derivatives.
Student time line
See here for the Google Summer of Code planning.
Clues
What about using a non linear optimization method ? For example IPOpt (https://projects.coin-or.org/Ipopt) is a very powerful solver. If a non linear constrained optimization method can be used, I have already interfaced this method to Scilab. See here.
Work time line
Step 1:
- Starting a minimal toolbox. Getting all the files related to fsolve and copy these files into a separate toolbox. This can certainly be done during community bonding. The interesting files are: In the directory scilab/modules/optimization/sci_gateway/fortran, you can find Ex-fsolve.f and sci_f_fsolve.f In the directory scilab/modules/optimization/src/fortran/minpack, you can find the hybr*.f files. In the directory scilab/modules/optimization/help/en_US, you can find the fsolve.xml file.
Step 2:
- Define a first strategy to solve efficiently a system of non linear equations:
- which methods in which cases (sparse, not sparse) ?
- when do we switch (small problem / large problem) ?
- how do we code (Scilab script, Fortran / C code interfaced to Scilab) ?
- do we code a new method (due to licence problems) ?
Step 3:
- Gather some test problems (gaz flow network problem, problems from other sources). For the gaz flow problem, it's a scilab script. For the other problems, it will be (maybe) fortran code. So, we certainly need to interface these codes to Scilab.
Step 4:
- Code (the code can certainly be started at step 2 ...). Maybe we can divide here the coding approach:
- write a sparse / full fsolve method (don't bother on the huge problem thing)
- add the hability to deal with big problems.
Step 5:
- Test (the test part should be started as soon as possible). Doc (the doc part should be started as soon as possible too).