Dear all,

I have a problem using datafit() to adjust the parameters of a model. The script below has four parts. The first one actually is a synthesis of the data I'm working with. It just creates the data (logf0, Te) to model.

The second part introduces the function g(x, p) to model the data.

Part three creates the "gap" function required for datafit(). It does so in two alternative ways selected with the variable option. If option = 1, the definition of the gap function is given inside the body of that function. If option = 2, it uses the model function previously created.

Finally, part 4 addresses the fitting procedure.

My problem is that with option = 1, it works fine, but when option = 2 it halts with the following error:

   --> [P, err] = datafit(G, Z, po)
   at line     8 of function G
   at line    16 of function costf
   at line   -12 of function optim
   at line   243 of function datafit ( C:\Program
   Files\scilab-6.1.1\modules\optimization\macros\datafit.sci line 255 )

   Invalid index.
   --> toc
     ans  =
       0.6467990

The normal time to do the full fitting is about 40 s. The time of the aborted process is 0.64 s, long enough to have done some iterations, which is baffling. I tried to see inside the datafit() source but frankly I don't understand what may be happening.

May be somebody with more experience in the use of this function can give a hint on what's going on...

Regards,

Federico Miyara

// 1 Data to approximate (Te = F(logf0))
logf  =  linspace(2.3025851,  9.9010847,  7)
Telogf  =  [  0.0446706   0.0225414   0.0147556   0.0055733   0.010994  ...
           0.0189552   0.0277157]
d   =      [-0.0338451  -0.0073327  -0.0076891  -0.0021065   0.0072043  ...
           0.0049894   0.0124498]
logf0  =  log(10*10.^(0:0.005:3.3))
Te = interp(logf0, logf, Telogf, d); // 2 Analytic model
function  y=g(x, p)
   y  =  p(1)  +  p(2)*abs(x).^p(3)  -  p(4)*exp(-p(5)*x.^2);
endfunction

// 3 Function to minimize
// (Gap or difference between data and model)
function  e=G(p, z)
   option  =  1
   select  option
   case  1
      gg  =  p(1)  +  p(2)*abs(z(1)).^p(3)  -  p(4)*exp(-p(5)*z(1).^2);
      e  =  z(2)  -  gg;
   case  2
      e  =  z(2)  -  g(z(1),  p)
   end
endfunction

// 4 Parameter algorithm adjustment
Z = [logf0 - 6.2515185; Te]; po = [0.005 -0.00013 4 0.01 1.7]
tic
[P,  err]  =  datafit(G,  Z,  po)
toc



--
El software de antivirus Avast ha analizado este correo electrónico en busca de 
virus.
https://www.avast.com/antivirus
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users

Reply via email to