fsolve

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