Hi Stéphane I used the sqrt function in the idea of the "Sum of the Square Error" (while there's not sum here) .. but I understand your remarks
Thanks Paul EXPORT CONTROL : Cet email ne contient pas de données techniques This email does not contain technical data De : users [mailto:users-boun...@lists.scilab.org] De la part de Stéphane Mottelet Envoyé : lundi 16 janvier 2017 10:45 À : Users mailing list for Scilab Objet : [EXTERNAL] Re: [Scilab-users] Optim & NelderMead use [closed] Hi Paul, your cost function f = sqrt((val_lin - val_rac)^2); hasn't changed, since sqrt(x^2)=abs(x). What I meant before is replacing f = abs(val_lin - val_rac); by f = (val_lin - val_rac)^2; in order to make it differentiable. When using a non-differentiable cost function together with numderivative, it seems logical that tweaking the step size could artificially help convergence. S. Le 16/01/2017 à 10:30, Carrico, Paul a écrit : Hi all After performing tests (and modifying the target function as it should have been done first), I can better understand how to use 'optim' and 'Neldermead' procedures. For my needs the mean flags are : - Step h in numderivative --> usefull reading as "EE 221 Numerical Computing" Scott Hudson - The threshold epsg in optim (%eps is the default value - such high accuracy is not necessary for my application - furthermore using a value such as 1e-5 leads to err=1 that is correct for checking) - Ditto for Nelder-Mead and '-tolfunrelative' & '-tolxrelative' Now it works fine :-) Thanks all for the support Paul ##################################################################### mode(0) clear global count_use; count_use = 0; // **** function f=lineaire(x, a2, b2) f = a2*x+b2; endfunction // **** function g=racine(x, a1, b1) g = sqrt(a1*x) + b1; endfunction // **** function f=target(x, a1, b1, a2, b2) val_lin = lineaire(x,a2,b2); val_rac = racine(x,a1,b1); f = sqrt((val_lin - val_rac)^2); global count_use; count_use = count_use +1; endfunction // Cost function: function [f, g, ind]=cost(x, ind, a1, b1, a2, b2) f = target(x); // g = numderivative(target, x.',order = 4); g = numderivative(target, x.',1e-3, order = 4); // 1E-3 => see EE 221 "Numerical Computing" Scott Hudson // Study of the influence of h on the number of target function calculation & the fopt accuracy: // (epsg = %eps here) // h = 1.e-1 => number = 220 & fopt = 2.242026e-05 // h = 1.e-2 => number = 195 & fopt = 2.267564e-07 // h = 1.e-3 => number = 170 & fopt = 2.189495e-09 ++++++ // h = 1.e-4 => number = 190 & fopt = 1.941203e-11 // h = 1.e-5 => number = 215 & fopt = 2.131628e-13 // h = 1.e-6 => number = 235 & fopt = 0. // h = 1.e-7 => number = 255 & fopt = 7.105427e-15 // h = 1.e-8 => number = 275 & fopt = 0. endfunction // ************************* // optimisation with optim initial_parameters = [10] lower_bounds = [0]; upper_bounds = [1000]; nocf = 1000; // number max of call of f niter = 1000; // number max of iterations a1 = 30; b1 = 2.5; a2 = 1; b2 = 2; epsg = 1e-5; // gradient norm threshold (%eps by defaut) --> lead to err = 1 !!! //epsg = %eps; // lead to Err = 13 epsf = 0; //threshold controlling decreasing of f (epsf = 0 by defaut) costf = list (cost, a1, b1, a2, b2); [fopt, xopt, gopt, work, iters, evals, err] = optim(costf,'b',lower_bounds,upper_bounds,initial_parameters,'qn','ar',nocf,niter,epsg,epsf); printf("Optimized value : %g\n",xopt); printf("min cost function value (should be as closed as possible to 0) ; %e\n",fopt); printf('Number of calculations = %d !!!\n',count_use); // Curves definition x = linspace(0,50,1000)'; plot_raci = racine(x,a1,b1); plot_lin = lineaire(x,a2,b2); scf(1); drawlater(); xgrid(3); f = gcf(); //f f.figure_size = [1000, 1000]; f.background = color(255,255,255); a = gca(); //a a.font_size = 2; a.x_label.text = "X axis" ; a.x_location="bottom"; a.x_label.font_angle=0; a.x_label.font_size = 4; a.y_label.text = "Y axis"; a.y_location="left"; a.y_label.font_angle=-90; a.Y_label.font_size = 4; a.title.text = "Title"; a.title.font_size = 5; a.line_style = 1; // Curves plot plot(x,plot_lin); e1 = gce(); p1 = e1.children; p1.thickness = 1; p1.line_style = 1; p1.foreground = 3; plot(x,plot_raci); e2 = gce(); p2 = e2.children; p2.thickness = 1; p2.line_style = 1; p2.foreground = 2; drawnow(); EXPORT CONTROL : Cet email ne contient pas de données techniques This email does not contain technical data _______________________________________________ users mailing list users@lists.scilab.org<mailto:users@lists.scilab.org> http://lists.scilab.org/mailman/listinfo/users<https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.scilab.org_mailman_listinfo_users&d=DwMG-g&c=0hKVUfnuoBozYN8UvxPA-w&r=4TCz--8bXfJhZZvIxJAemAJyz7Vfx78XvgYu3LN7eLo&m=ukUEk5nhdzIuOGpMpafIK_3yNqraOC0llI0bD1BOJ-w&s=PA1LLL81Y0BFOpHSSlQteCC8Mkvdc6GJPtsGf2XA1k8&e=>
_______________________________________________ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users