datafit — Parameter identification based on measured data
[p,err]=datafit([imp,] G [,DG],Z [,W],[contr],p0,[algo],[df0,[mem]], [work],[stop],['in'])
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.
function descriptor (e=G(p,z), e: ne x 1, p: np x 1, z: nz x 1)
partial of G wrt p function descriptor (optional; S=DG(p,z), S: ne x np)
matrix [z_1,z_2,...z_n] where z_i (nz x 1) is the ith measurement
weighting matrix of size ne x ne (optional; defaut no ponderation)
'b',binf,bsup with
binf and bsup real vectors
with same dimension as p0.
binf and bsup are lower and
upper bounds on p.
initial guess (size np x 1)
'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 ).
real scalar. Guessed decreasing of f at
first iteration. (df0=1 is the default
value).
integer, number of variables used to approximate the Hessian,
(algo='gc' or 'nd'). Default value is around
6.
sequence of optional parameters controlling the convergence of
the algorithm. stop= 'ar',nap, [iter [,epsg [,epsf
[,epsx]]]]
reserved keyword for stopping rule selection defined as follows:
maximum number of calls to fun
allowed.
maximum number of iterations allowed.
threshold on gradient norm.
threshold controlling decreasing of
f
threshold controlling variation of x.
This vector (possibly matrix) of same size as
x0 can be used to scale
x.
reserved keyword for initialization of parameters used when
fun in given as a Fortran routine (see
below).
Column vector, optimal solution found
scalar, least square error.
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.
//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 //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 [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 // 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