# fsolve

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

## Séquence d'appel

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

## Paramètres

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 SCI/modules/optimization/sci_gateway/fortran/Ex-fsolve.f
    [xres]=fsolve([100;100],'fsol1','fsolj1',1.e-7);
    a*xres+b

## Voir aussi

- external
- qpsolve
- optim