[Scilab-users] Problem using datafit()
Jakub Kopac
kopac.jakub at gmail.com
Thu Sep 9 12:23:47 CEST 2021
Hello,
looks like a conflict with internals or bug,
changing the function name of "g" will solve the problem.
Best regards
J.K.
st 8. 9. 2021 o 0:18 Federico Miyara <fmiyara at fceia.unr.edu.ar> napísal(a):
>
> 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 modelfunction 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)
> endendfunction
> // 4 Parameter algorithm adjustmentZ = [logf0 - 6.2515185; Te]; po = [0.005 -0.00013 4 0.01 1.7]tic[P, err] = datafit(G, Z, po)toc
>
>
>
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> Libre
> de virus. www.avast.com
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>
> <#m_2079245045849932327_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20210909/9bc38124/attachment.htm>
More information about the users
mailing list