Adeline CARNIS [Thu, 14 Nov 2013 08:48:44 +0000 (09:48 +0100)]
Change-Id: Icafbff56e8c32cab17ff5d2d6b61ce7fd3fed491

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);
@@ -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