Scilab Function

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

### Sequence d'appel

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

### Parametres

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

### Exemples

    // 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

### Voir aussi

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