Fix test on win 64b : test_run(optimization, derivative)
[scilab.git] / scilab / modules / optimization / tests / unit_tests / derivative.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2008-2009 - INRIA - Michael Baudin
4 // Copyright (C) 2011 - DIGITEO - Michael Baudin
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // =============================================================================
8 // <-- CLI SHELL MODE -->
9 // 1. Test with a scalar function
10 function y = myfunction (x)
11   y = x*x;
12 endfunction
13 x = 1.0;
14 expected = 2.0;
15 // 1.1 With default parameters
16 computed = derivative(myfunction,x);
17 assert_checkalmostequal ( computed , expected , 1.e-11 );
18 // 1.2 Test order 1
19 computed = derivative(myfunction,x,order=1);
20 assert_checkalmostequal ( computed , expected , 1.e-8 );
21 // 1.3 Test order 2
22 computed = derivative(myfunction,x,order=2);
23 assert_checkalmostequal ( computed , expected , 1.e-11 );
24 // 1.4 Test order 4
25 computed = derivative(myfunction,x,order=4);
26 assert_checkalmostequal ( computed , expected , %eps );
27 // 1.5 Compute second derivative at the same time
28 Jexpected = 2.0;
29 Hexpected = 2.0;
30 [Jcomputed , Hcomputed] = derivative(myfunction,x);
31 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-11 );
32 assert_checkalmostequal ( Hcomputed , Hexpected , %eps );
33 // 1.6 Test order 1
34 [Jcomputed , Hcomputed] = derivative(myfunction,x,order=1);
35 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-8 );
36 assert_checkalmostequal ( Hcomputed , Hexpected , 1.e-6 );
37 // 1.7 Test order 2
38 [Jcomputed , Hcomputed] = derivative(myfunction,x,order=2);
39 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-11 );
40 assert_checkalmostequal ( Hcomputed , Hexpected , %eps );
41 // 1.8 Test order 4
42 [Jcomputed , Hcomputed] = derivative(myfunction,x,order=4);
43 assert_checkalmostequal ( Jcomputed , Jexpected , %eps );
44 assert_checkalmostequal ( Hcomputed , Hexpected , 1.e-11 );
45 // 2. Test with a vector function
46 function y = myfunction2 (x)
47   y = x(1)*x(1) + x(2)+ x(1)*x(2);
48 endfunction
49 x = [1.0 
50 2.0];
51 expected = [4.0 2.0];
52 // 2.1 With default parameters
53 computed = derivative(myfunction2,x);
54 assert_checkalmostequal ( computed , expected , 1.e-10 );
55 // 2.2 Test order 1
56 computed = derivative(myfunction2,x,order=1);
57 assert_checkalmostequal ( computed , expected , 1.e-8 );
58 // 2.3 Test order 2
59 computed = derivative(myfunction2,x,order=2);
60 assert_checkalmostequal ( computed , expected , 1.e-10 );
61 // 2.4 Test order 4
62 computed = derivative(myfunction2,x,order=4);
63 assert_checkalmostequal ( computed , expected , %eps );
64 // 2.5 Compute second derivative at the same time
65 Jexpected = [4.0 2.0];
66 Hexpected = [2.0 1.0 1.0 0];
67 [Jcomputed , Hcomputed] = derivative(myfunction2,x);
68 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-10 );
69 assert_checkalmostequal ( Hcomputed , Hexpected , %eps );
70 // 2.6 Test order 1
71 [Jcomputed , Hcomputed] = derivative(myfunction2,x,order=1);
72 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-8 );
73 assert_checkalmostequal ( Hcomputed , Hexpected , 1.e-5 );
74 // 2.7 Test order 2
75 [Jcomputed , Hcomputed] = derivative(myfunction2,x,order=2);
76 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-10 );
77 assert_checkalmostequal ( Hcomputed , Hexpected , %eps );
78 // 2.8 Test order 4
79 [Jcomputed , Hcomputed] = derivative(myfunction2,x,order=4);
80 assert_checkalmostequal ( Jcomputed , Jexpected , %eps );
81 assert_checkalmostequal ( Hcomputed , Hexpected , 1.e-10, 1.e-10 );
82 // 3. Test H_form
83 // 3.1 Test H_form="default"
84 Jexpected = [4.0 2.0];
85 Hexpected = [2.0 1.0 1.0 0.0];
86 [Jcomputed , Hcomputed] = derivative(myfunction2 , x , H_form="default");
87 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-10 );
88 assert_checkalmostequal ( Hcomputed , Hexpected , %eps );
89 // 3.2 Test H_form='hypermat'
90 Jexpected = [4.0 2.0];
91 Hexpected = [2.0 1.0
92 1.0 0.0];
93 [Jcomputed , Hcomputed] = derivative(myfunction2 , x , H_form='hypermat');
94 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-10 );
95 assert_checkalmostequal ( Hcomputed , Hexpected , %eps );
96 // 3.3 Test H_form='hypermat'
97 Jexpected = [4.0 2.0];
98 Hexpected = [2.0 1.0 
99 1.0 0.0];
100 [Jcomputed , Hcomputed] = derivative(myfunction2 , x , H_form='hypermat');
101 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-10 );
102 assert_checkalmostequal ( Hcomputed , Hexpected , %eps );
103 // 4. Test verbose
104 [Jcomputed , Hcomputed] = derivative(myfunction2 , x , verbose = 1);
105 h = 6.055454e-06
106 order = 2
107 H_form = default
108 Q = 
109  
110     1.    0.  
111     0.    1.  
112 // 5. Test h parameter
113 // Test a case where the default step h is very small ~ 1.e-9,
114 // but, because the function is very flat in the neighbourhood of the 
115 // point, a larger step ~ 1.e-4 reduces the error.
116 // This means that this test cannot pass if the right step is 
117 // not taken into account, therefore testing the feature "h is used correctly".
118 myn = 1.e5;
119 function y = myfunction3 (x)
120   y = x^(2/myn);
121 endfunction
122 x = 1.0;
123 h = 6.055454e-006
124  h  =
125  
126     0.0000061  
127 Jexpected = (2/myn) * x^(2/myn-1);
128 Hexpected = (2/myn) * (2/myn-1) * x^(2/myn-2);
129 [Jcomputed , Hcomputed] = derivative(myfunction3 , x , h = 1.e-4 , order = 1 );
130 assert_checkalmostequal ( Jcomputed , Jexpected , 1.e-4 );
131 assert_checkalmostequal ( Hcomputed , Hexpected , 1.e-3 );
132 // 6. Test Q parameter
133 // TODO !