Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
See the recommended documentation of this 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'])
Arguments
- imp
- scalar argument used to set the trace mode. - imp=0nothing (execpt errors) is reported,- imp=1initial and final reports,- imp=2adds a report per iteration,- imp>2add reports on linear search. Warning: most of these reports are written on the Scilab standard output. 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,bsupwith- binfand- bsupreal vectors with same dimension as- p0.- binfand- bsupare 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 - fat first iteration. (- df0=1is 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 - funallowed.
- 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- x0can be used to scale- x.
 
- "in"
- reserved keyword for initialization of parameters used when - funin 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)
Examples
//generate the data function y=FF(x, p) y=p(1)*(x-p(2))+p(3)*x.*x endfunction X=[]; Y=[]; pg=[34;12;14] //parameter used to generate data for x=0:.1:3 Y=[Y,FF(x,pg)+100*(rand()-.5)]; X=[X,x]; end Z=[Y;X]; //The criterion function function e=G(p, z), y=z(1),x=z(2); e=y-FF(x,p), endfunction //Solve the problem p0=[3;5;10] [p,err]=datafit(G,Z,p0); scf(0);clf() plot2d(X,FF(X,pg),5) //the curve without noise plot2d(X,Y,-1) // the noisy data plot2d(X,FF(X,p),12) //the solution
 
        //generate the data function y=FF(x, p) y=p(1)*(x-p(2))+p(3)*x.*x endfunction //the gradient of the criterion function function s=DG(p, z), a=p(1),b=p(2),c=p(3),y=z(1),x=z(2), s=-[x-b,-a,x*x] endfunction function e=G(p, z), y=z(1),x=z(2); e=y-FF(x,p), endfunction X=[];Y=[]; pg=[34;12;14] for x=0:.1:3 Y=[Y,FF(x,pg)+100*(rand()-.5)]; X=[X,x]; end Z=[Y;X]; p0=[3;5;10] [p,err]=datafit(G,DG,Z,p0); scf(1); clf() plot2d(X,FF(X,pg),5) //the curve without noise plot2d(X,Y,-1) // the noisy data plot2d(X,FF(X,p),12) //the solution
 
        //generate the data function y=FF(x, p) y=p(1)*(x-p(2))+p(3)*x.*x endfunction //the gradient of the criterion function function s=DG(p, z), a=p(1),b=p(2),c=p(3),y=z(1),x=z(2), s=-[x-b,-a,x*x] endfunction function e=G(p, z), y=z(1),x=z(2); e=y-FF(x,p), endfunction X=[];Y=[]; pg=[34;12;14] for x=0:.1:3 Y=[Y,FF(x,pg)+100*(rand()-.5)]; X=[X,x]; end Z=[Y;X]; p0=[3;5;10] // Add some bounds on the estimate of the parameters // We want positive estimation (the result will not change) [p,err]=datafit(G,DG,Z,'b',[0;0;0],[%inf;%inf;%inf],p0,algo='gc'); scf(1); clf() plot2d(X,FF(X,pg),5) //the curve without noise plot2d(X,Y,-1) // the noisy data plot2d(X,FF(X,p),12) //the solution

See Also
| Report an issue | ||
| << Nonlinear Least Squares | Nonlinear Least Squares | leastsq >> |