Optimization demos: check handle validity before plotting
[scilab.git] / scilab / modules / optimization / demos / datafit / demo_datafit.sci
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 // Copyright (C) 2010 - DIGITEO - Allan CORNET
5 //
6 // This file is distributed under the same license as the Scilab package.
7 //
8
9 function demo_datafit()
10
11     function y = FF(x)
12         // parametric function model
13         y = a*(x-b)+c*x.*x;
14     endfunction
15
16     function e = G(p, z)
17         // datafit external computes the error
18         a = p(1),
19         b = p(2),
20         c = p(3),
21         y = z(1),
22         x = z(2),
23         e = y - FF(x)
24     endfunction
25
26     // create the experimental data
27     X = [];
28     Y = [];
29     a = 34;
30     b = 12;
31     c = 14;
32     for x=0:.1:3, Y=[Y,FF(x)+100*(rand()-.5)];X=[X,x];end
33     Z = [Y; X];
34     //show the data points
35     my_handle = scf(100001);
36     clf(my_handle, "reset");
37     demo_viewCode(SCI + "/modules/optimization/demos/datafit/demo_datafit.sci");
38     plot(X, Y, "+");
39     f = gcf();
40     l=legend(_("Experimental data"),2);
41     sleep(500);
42     // solve the non linear data fitting
43     [p,err] = datafit(G,Z,[3;5;10]);
44     if is_handle_valid(f) then // If the window is still open after the sleep
45         // show the fitting curve
46         drawlater()
47         plot(X,FF(X), "r")
48         delete(l);
49         l = legend([_("Experimental data"); _("Fitting function")],2);
50         drawnow()
51     end
52
53 endfunction
54