# 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).