fsolve

Scilab Function
Last update : 25/04/2007

fsolve - résout un système d'équations non-linéaires

### Calling Sequence

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

### Parameters

- `x0` : vecteur réel (vecteur initial).
- `fct` : fonction externe (fonction Scilab ou chaîne de caractères ou liste).
- `fjac` : fonction externe (fonction Scilab ou chaîne de caractères ou liste).
- `tol` : scalaire. Tolérance : l'algorithme s'arrête lorsque l'erreur relative estimée entre x et la solution est inférieure à tol (`tol=1.d-10` par défaut).
- `x :` vecteur réel (solution estimée).
- `v :` vecteur réel (valeur de la fonction en x).
- `info` : indicateur d'arrêt de l'algorithme
  - `0` : paramètres d'entrée incorrects
  - `1` : l'erreur relative estimée entre x et la solution est inférieure à tol
  - `2` : nombre d'appels à fct
  - `3` : tol est trop petit. L'algorithme stationne.
  - `4` : les itérations n'améliorent pas assez la solution.

### Description

Résout un système de n équations non linéaires à n inconnues avec un algorithme du type méthode hybride de Powell. La Jacobienne peut être fournie (c'est fortement conseillé).

          0 = fct(x)

`fct` est une fonction "externe" Cette fonction renvoie `v=fct(x)` pour `x` donné.

La séquence d'appel de `fct` est :

          [v]=fct(x).

Si `fct` est une chaîne de caractères, elle désigne le nom d'une subroutine Fortran ou C liée dynamiquement à Scilab, avec comme liste d'appel Fortran :

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

ou alors pour une routine C :

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

(voir `link` ).

`jac` est une fonction "externe" aussi. Cette fonction renvoie `v=d(fct)/dx (x)` pour `x` donné.

La séquence d'appel de `jac` est :

          [v]=jac(x).

Si `jac` est une chaîne de caractères, elle désigne le nom d'une subroutine Fortran ou C liée dynamiquement à Scilab. Les séquences d'appel sont les mêmes que pour fct (attention v doit être un tableau n x n).

### Examples

        // un exemple simple
        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
        // voir routines/default/Ex-fsolve.f
        [xres]=fsolve([100;100],'fsol1','fsolj1',1.e-7);
        a*xres+b

### See Also

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