Scilab Function

datafit - Parameter identification based on measured data

### Calling Sequence

  `[p,err]=datafit([imp,] G [,DG],Z [,W],[contr],p0,[algo],[df0,[mem]],`
  `[work],[stop],['in'])`

### Parameters

- `imp` : scalar argument used to set the trace mode. `imp=0` nothing (execpt errors) is reported, `imp=1` initial and final reports, `imp=2` adds a report per iteration, `imp>2` add reports on linear search. Warning, most of these reports are written on the Scilab standard output.
- `G` : function descriptor (e=G(p,z), e: ne x 1, p: np x 1, z: nz x 1)
- `DG` : partial of G wrt p function descriptor (optional; S=DG(p,z), S: ne x np)
- `Z` : matrix [z_1,z_2,...z_n] where z_i (nz x 1) is the ith measurement
- `W` : weighting matrix of size ne x ne (optional; defaut no ponderation)
- `contr` : `'b',binf,bsup` with `binf` and `bsup` real vectors with same dimension as `p0`. `binf` and `bsup` are lower and upper bounds on `p`.
- `p0` : initial guess (size np x 1)
- `algo` : `'qn'` or `'gc'` or `'nd'` . This string stands for quasi-Newton (default), conjugate gradient or non-differentiable respectively. Note that `'nd'` does not accept bounds on `x` ).
- `df0` : real scalar. Guessed decreasing of `f` at first iteration. (`df0=1` is the default value).
- `mem :` integer, number of variables used to approximate the Hessian, (`algo='gc' or 'nd'`). Default value is around 6.
- `stop` : sequence of optional parameters controlling the convergence of the algorithm. `stop= 'ar',nap, [iter [,epsg [,epsf [,epsx]]]]`

- `"ar"` : reserved keyword for stopping rule selection defined as follows:
- `nap` : maximum number of calls to `fun` allowed.
- `iter` : maximum number of iterations allowed.
- `epsg` : threshold on gradient norm.
- `epsf` : threshold controlling decreasing of `f`
- `epsx` : threshold controlling variation of `x`. This vector (possibly matrix) of same size as `x0` can be used to scale `x`.

- `"in"` : reserved keyword for initialization of parameters used when `fun` in given as a Fortran routine (see below).
- `p` : Column vector, optimal solution found
- `err` : scalar, least square error.

### Description

`datafit` is used for fitting data to a model. For a given function `G(p,z)`, this function finds the best vector of parameters `p` for approximating `G(p,z_i)=0` for a set of measurement vectors `z_i`. Vector `p` is found by minimizing `G(p,z_1)'WG(p,z_1)+G(p,z_2)'WG(p,z_2)+...+G(p,z_n)'WG(p,z_n)`

`datafit` is an improved version of `fit_dat`.

### Examples

    deff('y=FF(x)','y=a*(x-b)+c*x.*x')
    X=[];Y=[];
    a=34;b=12;c=14;for x=0:.1:3, Y=[Y,FF(x)+100*(rand()-.5)];X=[X,x];end
    Z=[Y;X];
    deff('e=G(p,z)','a=p(1),b=p(2),c=p(3),y=z(1),x=z(2),e=y-FF(x)')
    [p,err]=datafit(G,Z,[3;5;10])

    xset('window',0)
    xbasc();
    plot2d(X',Y',-1)
    plot2d(X',FF(X)',5,'002')
    a=p(1),b=p(2),c=p(3);plot2d(X',FF(X)',12,'002')
    //same probleme with a known
    deff('e=G(p,z,a)','b=p(1),c=p(2),y=z(1),x=z(2),e=y-FF(x)')
    [p,err]=datafit(list(G,a),Z,[5;10])

    a=34;b=12;c=14;
    deff('s=DG(p,z)','y=z(1),x=z(2),s=-[x-p(2),-p(1),x*x]')
    [p,err]=datafit(G,DG,Z,[3;5;10])
    xset('window',1)
    xbasc();
    plot2d(X',Y',-1)
    plot2d(X',FF(X)',5,'002')
    a=p(1),b=p(2),c=p(3);plot2d(X',FF(X)',12,'002')

### See Also

`optim` `leastsq`