Scilab Function
Last update : August 1993

fsolve - find a zero of a system of n nonlinear functions

### Calling Sequence

  `[x [,v [,info]]]=fsolve(x0,fct [,fjac] [,tol])`

### Parameters

- `x0`: real vector (initial value of function argument).
- `fct`: external (i.e function or list or string).
- `fjac`: external (i.e function or list or string).
- `tol`: real scalar. precision tolerance: termination occurs when the algorithm estimates that the relative error between x and the solution is at most tol. (`tol=1.d-10` is the default value).
- `x :` real vector (final value of function argument, estimated zero).
- `v :` real vector (value of function at x).
- `info`: termination indicator
  - `0`: improper input parameters.
  - `1`: algorithm estimates that the relative error between x and the solution is at most tol.
  - `2`: number of calls to fcn reached
  - `3`: tol is too small. No further improvement in the approximate solution x is possible.
  - `4`: iteration is not making good progress.

### Description

find a zero of a system of n nonlinear functions in n variables by a modification of the powell hybrid method. Jacobian may be provided.

    0 = fct(x) w.r.t x.

`fct` is an "external". This external returns `v=fct(x)` given `x`.

The simplest calling sequence for `fct` is:

    [v]=fct(x).

If `fct` is a character string, it refers to a C or Fortran routine which must be linked to Scilab. Fortran calling sequence must be

    fct(n,x,v,iflag)
    integer n,iflag
    double precision x(n),v(n)

and C Calling sequence must be

    fct(int *n, double x[],double v[],int *iflag)

Incremental link is possible (help `link`).

`jac` is an "external". This external returns `v=d(fct)/dx (x)` given `x`.

The simplest calling sequence for `jac` is:

    [v]=jac(x).

If `jac` is a character string, it refers to a to a C or Fortran routine which must be linked to Scilab calling sequences are the same as those for fct. Note however that v must be a nxn array.

### Examples

    // A simple example with fsolve
    a=[1,7;2,8];b=[10;11];
    deff('[y]=fsol1(x)','y=a*x+b');
    deff('[y]=fsolj1(x)','y=a');
    [xres]=fsolve([100;100],fsol1);
    a*xres+b
    [xres]=fsolve([100;100],fsol1,fsolj1);
    a*xres+b
    // See routines/default/Ex-fsolve.f
    [xres]=fsolve([100;100],'fsol1','fsolj1',1.e-7);
    a*xres+b

### See Also

`external`, `quapro`, `linpro`, `optim`,