Following the changes in variance function (https://codereview.scilab.org/#/c/13009... 53/13153/2
Adeline CARNIS [Thu, 14 Nov 2013 08:48:44 +0000 (09:48 +0100)]
Change-Id: Icafbff56e8c32cab17ff5d2d6b61ce7fd3fed491

scilab/modules/compatibility_functions/macros/mtlb_var.sci
scilab/modules/compatibility_functions/tests/unit_tests/mtlb_var.dia.ref
scilab/modules/compatibility_functions/tests/unit_tests/mtlb_var.tst
scilab/modules/statistics/macros/variance.sci

index 911bd7f..e53ab29 100644 (file)
@@ -26,14 +26,16 @@ function [s] = mtlb_var (x,w,dim)
     //   dim : the dimension along which the variance is computed (default is 1, i.e. column by column)
     //     If dim is 2, the variance is computed row by row.
     //
+
     if x==[] then s=%nan, return, end
     [lhs,rhs]=argn(0)
     if rhs==0 then
         error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"mtlb_var",1,2))
     end
     [m n]=size(x);
-    if rhs==1 then
-        w=0;
+    
+    if rhs == 1 then
+        w = 0;
     end
     if rhs<=2 then
         dim=1;
@@ -52,6 +54,15 @@ function [s] = mtlb_var (x,w,dim)
             end
         end
     end
-    s = variance(x,dim,w);
+    
+    query = warning("query");
+    warning("off")
+    if rhs == 1 | w == 0 then
+        s = variance(x,dim);
+    else
+        s = variance(x,dim,mean(x, dim));
+    end
+    warning(query)
+
 endfunction
 
index d96cdf6..5b66322 100644 (file)
@@ -6,28 +6,28 @@
 // =============================================================================
 // Checks performed with Octave v3.0.3
 // With x as a row vector and 1 argument
-x = [0.9    0.7
-    0.1    0.1
+x = [0.9    0.7  
+    0.1    0.1  
     0.5    0.4];
 computed = mtlb_var(x);
 expected = [0.16 0.09];
-if abs(computed-expected)>%eps then bugmes();quit;end
+assert_checkalmostequal(computed, expected, 1e-15);
 // Normalization with N-1
-x = [0.9    0.7
-    0.1    0.1
+x = [0.9    0.7  
+    0.1    0.1  
     0.5    0.4];
 w = 0;
 computed = mtlb_var(x,w);
 expected = [0.16 0.09];
-if abs(computed-expected)>%eps then bugmes();quit;end
+assert_checkalmostequal(computed, expected, 1e-15);
 // Normalization with N
-x = [0.9    0.7
-    0.1    0.1
+x = [0.9    0.7  
+    0.1    0.1  
     0.5    0.4];
 w = 1;
 computed = mtlb_var(x,w);
 expected = [0.32 0.18] / 3;
-if abs(computed-expected)>%eps then bugmes();quit;end
+assert_checkalmostequal(computed, expected, 1e-15);
 // With x as a complex row vector and 1 argument
 x = [ 0.9, 0.7;
 0.1, 0.1;
@@ -35,7 +35,7 @@ x = [ 0.9, 0.7;
 x = x + x * 2 * %i;
 computed = mtlb_var(x);
 expected = [0.8 0.45];
-if abs(computed-expected)>%eps then bugmes();quit;end
+assert_checkalmostequal(computed, expected, 1e-15);
 // With x as a complex row vector and variance along the dimension 2, i.e. row by row and w= 0
 x = [ 0.9, 0.7;
 0.1, 0.1;
@@ -47,7 +47,7 @@ computed = mtlb_var(x,w,dim);
 expected = [0.1
 0.
 0.025];
-if abs(computed-expected)>%eps then bugmes();quit;end
+assert_checkalmostequal(computed, expected, 1e-15);
 // With x as a complex row vector and variance along the dimension 2, i.e. row by row and w= 1
 x = [ 0.9, 0.7;
 0.1, 0.1;
@@ -59,14 +59,14 @@ computed = mtlb_var(x,w,dim);
 expected = [0.05
 0.
 0.0125];
-if abs(computed-expected)>%eps then bugmes();quit;end
+assert_checkalmostequal(computed, expected, 1e-15);
 // With x as a row vector and 1 argument
 x = [10 20 30 40 50 60 70 80 90];
 computed = mtlb_var(x,0,2);
 expected = 750;
-if abs(computed-expected)>%eps then bugmes();quit;end
+assert_checkequal(computed, expected);
 // With x as a column vector and 1 argument
 x = [10; 20; 30; 40; 50; 60; 70; 80; 90];
 computed = mtlb_var(x);
 expected = 750;
-if abs(computed-expected)>%eps then bugmes();quit;end
+assert_checkequal(computed, expected);
index d27bad4..c1ba944 100644 (file)
@@ -13,7 +13,8 @@ x = [0.9    0.7
     0.5    0.4];
 computed = mtlb_var(x);
 expected = [0.16 0.09];
-if abs(computed-expected)>%eps then pause,end
+assert_checkalmostequal(computed, expected, 1e-15);
+
 // Normalization with N-1
 x = [0.9    0.7  
     0.1    0.1  
@@ -21,7 +22,8 @@ x = [0.9    0.7
 w = 0;
 computed = mtlb_var(x,w);
 expected = [0.16 0.09];
-if abs(computed-expected)>%eps then pause,end
+assert_checkalmostequal(computed, expected, 1e-15);
+
 // Normalization with N
 x = [0.9    0.7  
     0.1    0.1  
@@ -29,7 +31,8 @@ x = [0.9    0.7
 w = 1;
 computed = mtlb_var(x,w);
 expected = [0.32 0.18] / 3;
-if abs(computed-expected)>%eps then pause,end
+assert_checkalmostequal(computed, expected, 1e-15);
+
 // With x as a complex row vector and 1 argument
 x = [ 0.9, 0.7;
 0.1, 0.1;
@@ -37,7 +40,8 @@ x = [ 0.9, 0.7;
 x = x + x * 2 * %i;
 computed = mtlb_var(x);
 expected = [0.8 0.45];
-if abs(computed-expected)>%eps then pause,end
+assert_checkalmostequal(computed, expected, 1e-15);
+
 // With x as a complex row vector and variance along the dimension 2, i.e. row by row and w= 0
 x = [ 0.9, 0.7;
 0.1, 0.1;
@@ -49,7 +53,8 @@ computed = mtlb_var(x,w,dim);
 expected = [0.1
 0.
 0.025];
-if abs(computed-expected)>%eps then pause,end
+assert_checkalmostequal(computed, expected, 1e-15);
+
 // With x as a complex row vector and variance along the dimension 2, i.e. row by row and w= 1
 x = [ 0.9, 0.7;
 0.1, 0.1;
@@ -61,16 +66,16 @@ computed = mtlb_var(x,w,dim);
 expected = [0.05
 0.
 0.0125];
-if abs(computed-expected)>%eps then pause,end
+assert_checkalmostequal(computed, expected, 1e-15);
+
 // With x as a row vector and 1 argument
 x = [10 20 30 40 50 60 70 80 90];
 computed = mtlb_var(x,0,2);
 expected = 750;
-if abs(computed-expected)>%eps then pause,end
+assert_checkequal(computed, expected);
+
 // With x as a column vector and 1 argument
 x = [10; 20; 30; 40; 50; 60; 70; 80; 90];
 computed = mtlb_var(x);
 expected = 750;
-if abs(computed-expected)>%eps then pause,end
-
-
+assert_checkequal(computed, expected);
index 3b4ae37..5081355 100644 (file)
@@ -84,6 +84,7 @@ function [s, m] = variance(x, orien, m)
     // ------------
 
     d = size(x, orien) - 1 + exists("m","local") // Denominator. If m is given, then the a priori mean is known and we divide by size(n,orien)
+
     if rhs == 3 & isnan(m) then
         // This will compute the "biased variance": the denominator is size(x,orien) but the a priori mean is not considered as provided.
         rhs = 2
@@ -105,8 +106,8 @@ function [s, m] = variance(x, orien, m)
                 // If lhs==1, we do not need to perform this operation, because in the following 'x - m', m can be a scalar
                 m = m*ones(x)
             else
-                if transposed == %t then
-                    m = m';
+                if transposed then
+                    m = m.';
                 end
                 m = m.*.ones(size(x,1),1)
             end