* Bug #9789 fixed - Optimization: optim printing its termination status
[scilab.git] / scilab / modules / optimization / tests / nonreg_tests / bug_9208.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 //
8 // <-- CLI SHELL MODE -->
9 //
10 // <-- Non-regression test for bug 9208 -->
11 //
12 // <-- Bugzilla URL -->
13 // http://bugzilla.scilab.org/show_bug.cgi?id=9208
14 //
15 // <-- Short Description -->
16 // Added three optional output arguments to optim(), to retrieve #iterations,
17 // #evaluations and a termination flag.
18 //
19 // Example 1
20 a  = 1.0;
21 b  = 2.0;
22 c  = 3.0;
23 d  = 4.0;
24 x0 = [1 1];
25 function [f, g, ind] = costfunction(x, ind, a, b, c, d)
26     f = a * ( x(1) - c ) ^2 + b * ( x(2) - d )^2;
27     g(1) = 2 * a * ( x(1) - c );
28     g(2) = 2 * b * ( x(2) - d );
29 endfunction
30 costf = list ( costfunction , a , b , c, d );
31 [fopt, xopt, w, g, iters, evals, err] = optim ( costf , x0 );
32 Norm of projected gradient lower than   0.0000000D+00.
33
34 assert_checkequal([iters evals err], [10 11 1]);
35 [fopt, xopt, w, g, iters, evals, err] = optim ( costf , x0 , "ar",nap=5 );
36 Optim stops: maximum number of calls to f is reached.
37
38 assert_checkequal([iters evals err], [4 5 4]);
39 [fopt, xopt, w, g, iters, evals, err] = optim ( costf , x0 , "ar",nap=100,iter=5 );
40 Optim stops: maximum number of iterations is reached.
41
42 assert_checkequal([iters evals err], [6 7 5]);
43 // Example 2
44 x0 = [-1.2 1.0];
45 function f = rosenbrock(x)
46     f = 100.0 *(x(2)-x(1)^2)^2 + (1-x(1))^2;
47 endfunction
48 function [f, g, ind] = rosenbrockCost2(x, ind)
49     f = rosenbrock ( x );
50     g = derivative ( rosenbrock , x.' , order = 4 );
51 endfunction
52 [fopt, xopt, w, g, iters, evals, err] = optim ( rosenbrockCost2 , x0 );
53 End of optimization.
54
55 assert_checkequal([iters evals err], [37 50 9]);
56 [fopt, xopt, w, g, iters, evals, err] = optim ( rosenbrockCost2 , x0 , "ar",nap=10 );
57 Optim stops: maximum number of calls to f is reached.
58
59 assert_checkequal([iters evals err], [8 10 4]);
60 [fopt, xopt, w, g, iters, evals, err] = optim ( rosenbrockCost2 , x0 , "ar",nap=100,iter=10 );
61 Optim stops: maximum number of iterations is reached.
62
63 assert_checkequal([iters evals err], [11 14 5]);