[Scilab-users] Problem using datafit()
Stéphane Mottelet
stephane.mottelet at utc.fr
Thu Sep 9 12:28:59 CEST 2021
Hi,
This is just a problem of variable scope, "g" is used internally by
datafit, likely. All user parameters or functions used in G should be
given by using a list, i.e. :
function e=G(p, z, g)
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(list(G,g), Z, po)
toc
S.
Le 09/09/2021 à 12:23, Jakub Kopac a écrit :
> 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
> <mailto: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 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
>
>
> <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 <mailto:users at lists.scilab.org>
> http://lists.scilab.org/mailman/listinfo/users
> <http://lists.scilab.org/mailman/listinfo/users>
>
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
--
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20210909/55863b52/attachment.htm>
More information about the users
mailing list