* Bug #7858 fixed - variance and variancef can now return mean 55/12855/3
Paul BIGNIER [Mon, 7 Oct 2013 15:57:59 +0000 (17:57 +0200)]
Although they both compute it, neither variance nor variancef return the mean (resp meanf).

The new optional output parameter contains the output of the mean function (resp meanf).

Change-Id: I1a593cf02fd28c609a0a3f09a826886ab9e0064d

SEP/INDEX
SEP/SEP_112_variance_variancef.odt [new file with mode: 0644]
scilab/CHANGES_5.5.X
scilab/modules/statistics/help/en_US/descriptive_statistics/variance.xml
scilab/modules/statistics/help/en_US/descriptive_statistics/variancef.xml
scilab/modules/statistics/macros/variance.sci
scilab/modules/statistics/macros/variancef.sci
scilab/modules/statistics/tests/unit_tests/variance.dia.ref
scilab/modules/statistics/tests/unit_tests/variance.tst
scilab/modules/statistics/tests/unit_tests/variancef.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/variancef.tst [new file with mode: 0644]

index a4524ac..299b034 100644 (file)
--- a/SEP/INDEX
+++ b/SEP/INDEX
@@ -105,3 +105,6 @@ SEP #106: Error control in function intc.
 SEP #107: Add an xcosAddToolsMenu and xcosUpdateBlock to ease external tools integration.
 SEP #108: 3-D arrows with xarrows
 SEP #109: New input argument for neldermead_search(), to control warnings.
+SEP #110: /* RESERVED */
+SEP #111: /* RESERVED */
+SEP #112: variance and variancef can now return the mean of the input in a new output argument.
diff --git a/SEP/SEP_112_variance_variancef.odt b/SEP/SEP_112_variance_variancef.odt
new file mode 100644 (file)
index 0000000..ad7d13f
Binary files /dev/null and b/SEP/SEP_112_variance_variancef.odt differ
index 7fba1f1..abe426d 100644 (file)
@@ -11,6 +11,9 @@ Scilab Bug Fixes
 * Bug #7705 fixed - In the Genetic algorithms help pages, documented the
                     "dimension", "minbounds" and "maxbounds" fields.
 
+* Bug #7858 fixed - variance and variancef can now return the mean of the input
+                    in a new output argument.
+
 * Bug #8031 fixed - cdfgam error message fixed.
 
 * Bug #8337 fixed - mtlb_rand now uses the "uniform" rule, whatever the random rule set is.
index fab4f14..248d139 100644 (file)
 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="en" xml:id="variance">
     <refnamediv>
         <refname>variance</refname>
-        <refpurpose>variance of the values of a vector or matrix (or hypermatrix) real or complex</refpurpose>
+        <refpurpose>variance and mean of the values of a vector or matrix (or hypermatrix) real or complex</refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Calling Sequence</title>
         <synopsis>s = variance(x [,orien [,w]])
-            s = variance(x,'r') or s = variance(x,1)
-            s = variance(x,'c') or s = variance(x,2)
-            s = variance(x,'*',1)
-            s = variance(x,'r',1)
-            s = variance(x,'c',1)
+            [s,m] = variance(x,'r') or s = variance(x,1)
+            [s,m] = variance(x,'c') or s = variance(x,2)
+            [s,m] = variance(x,'*',1)
+            [s,m] = variance(x,'r',1)
+            [s,m] = variance(x,'c',1)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
@@ -86,6 +86,9 @@
             <literal>s = variance(x,'r')</literal> (or,  equivalently, <literal>s = variance(x,1)</literal>)
             is the rowwise variance: s is a row vector, with s(i) the variance of <literal>s(i) = variance(x(:,i))</literal>.
         </para>
+        <para>
+            The second output argument <literal>m</literal> is the mean of the input, with respect to the <literal>orien</literal> parameter.
+        </para>
     </refsection>
     <refsection>
         <title>Examples</title>
@@ -115,6 +118,9 @@ s = variance(x, "*", 1)     // should be smaller than the previous one
         <title>See Also</title>
         <simplelist type="inline">
             <member>
+                <link linkend="variancef">variancef</link>
+            </member>
+            <member>
                 <link linkend="mtlb_var">mtlb_var</link>
             </member>
         </simplelist>
index 087b62b..22f208a 100644 (file)
 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="en" xml:id="variancef">
     <refnamediv>
         <refname>variancef</refname>
-        <refpurpose>standard deviation of the values of a  vector or matrix</refpurpose>
+        <refpurpose>variance and mean of the values of a vector or matrix</refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Calling Sequence</title>
         <synopsis>s=variancef(x,fre)
-            s=variancef(x,fre,'r') or s=variancef(x,fre,1)
-            s=variancef(x,fre,'c') or s=variancef(x,fre,2)
+            [s,m]=variancef(x,fre,'r') or s=variancef(x,fre,1)
+            [s,m]=variancef(x,fre,'c') or s=variancef(x,fre,2)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
     <refsection>
         <title>Description</title>
         <para>
-            This  function computes the variance  of the values of a
-            vector  or matrix <literal>x</literal>,  each of  them counted with a
-            frequency  signaled by  the corresponding values  of the
+            This function computes the variance of the values of a
+            vector or matrix <literal>x</literal>, each of them counted with a
+            frequency signaled by the corresponding values of the
             integer vector or matrix <literal>fre</literal> with the same type of
             <literal>x</literal>.
         </para>
         <para>
-            For a vector  or matrix <literal>x</literal>, <literal>s=variancef(x,fre)</literal> (or
-            <literal>s=variancef(x,fre,'*')</literal>)  returns in scalar <literal>s</literal>  the
-            variance of all  the   entries of <literal>x</literal>, each    value
-            counted  with   the    multiplicity  indicated by    the
+            For a vector or matrix <literal>x</literal>, <literal>s=variancef(x,fre)</literal> (or
+            <literal>s=variancef(x,fre,'*')</literal>) returns in scalar <literal>s</literal> the
+            variance of all the entries of <literal>x</literal>, each value
+            counted with the multiplicity indicated by the
             corresponding value of <literal>fre</literal>.
         </para>
         <para>
-            <literal>s=variancef(x,fre,'r')</literal>(or,                equivalently,
-            <literal>s=variancef(x,fre,1)</literal>) returns in each  entry of the row
-            vector  <literal>s</literal> of  type  1xsize(x,'c') the  variance of
-            each column of  <literal>x</literal>,   each value counted  with  the
-            multiplicity  indicated by  the  corresponding value  of
+            <literal>s=variancef(x,fre,'r')</literal>(or, equivalently,
+            <literal>s=variancef(x,fre,1)</literal>) returns in each entry of the row
+            vector <literal>s</literal> of type 1xsize(x,'c') the variance of
+            each column of <literal>x</literal>, each value counted with the
+            multiplicity indicated by the corresponding value of
             <literal>fre</literal>.
         </para>
         <para>
-            <literal>s=variancef(x,fre,'c')</literal>(or,                equivalently,
-            <literal>s=variancef(x,fre,2)</literal>)  returns  in  each   entry of the
+            <literal>s=variancef(x,fre,'c')</literal>(or, equivalently,
+            <literal>s=variancef(x,fre,2)</literal>) returns in each entry of the
             column vector <literal>s</literal> of type size(x,'c') x1 the variance
-            of  each row  of  <literal>x</literal>, each value  counted  with the
-            multiplicity indicated  by  the  corresponding value  of
+            of each row of <literal>x</literal>, each value counted with the
+            multiplicity indicated by the corresponding value of
             <literal>fre</literal>.
         </para>
+        <para>
+            The second output argument <literal>m</literal> is the mean of the input,
+            with respect to the <literal>orien</literal> parameter.
+        </para>
     </refsection>
     <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[ 
-x=[0.2113249 0.0002211 0.6653811;0.7560439 0.9546254 0.6283918]
-fre=[1 2 3;3 4 3]
-m=variancef(x,fre)
-m=variancef(x,fre,'r')
-m=variancef(x,fre,'c')
+x = [0.2113249 0.0002211 0.6653811; 0.7560439 0.9546254 0.6283918]
+fre = [1 2 3; 3 4 3]
+[s, m] = variancef(x, fre)
+[s, m] = variancef(x, fre, "r")
+[s, m] = variancef(x, fre, "c")
  ]]></programlisting>
     </refsection>
+    <refsection role="see also">
+        <title>See Also</title>
+        <simplelist type="inline">
+            <member>
+                <link linkend="variance">variance</link>
+            </member>
+            <member>
+                <link linkend="mtlb_var">mtlb_var</link>
+            </member>
+        </simplelist>
+    </refsection>
     <refsection>
         <title>Bibliography</title>
         <para>
index d827df3..6a189a1 100644 (file)
@@ -9,7 +9,7 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 //
 
-function [s] = variance(x, orien, w)
+function [s,m] = variance(x, orien, w)
     //
     //This function computes  the  variance  of  the values of  a  vector or
     //matrix x.
@@ -73,9 +73,10 @@ function [s] = variance(x, orien, w)
     end
     s = sum(abs(x - m).^2, orien) / d
 
-    if transposed
+    m = m(1, :);
+    if transposed then
         s = s.'
+        m = m.'
     end
 
 endfunction
-
index a569e77..931b9b0 100644 (file)
@@ -9,7 +9,7 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 //
 
-function [s]=variancef(x,fre,orien)
+function [s,m]=variancef(x,fre,orien)
     //
     //This function  computes  the variance  of the values  of   a vector or
     //matrix x, each  of  them  counted with  a  frequency signaled   by the
@@ -40,23 +40,28 @@ function [s]=variancef(x,fre,orien)
     if rhs==2 then
         sumfre=sum(fre)
         if sumfre <= 1 then error(msprintf(gettext("%s: Wrong value for input argument #%d: Must be > %d.\n"),"variancef", 2, 1)), end
-        s=(sum(((x-meanf(x,fre)).^2).*fre))/(sumfre-1),
+        m = meanf(x,fre)
+        s=(sum(((x-m).^2).*fre))/(sumfre-1),
         return,
     end
     if orien=="*",
         sumfre=sum(fre)
         if sumfre <= 1 then error(msprintf(gettext("%s: Wrong value for input argument #%d: Must be > %d.\n"),"variancef", 2, 1)),end
-        s=(sum(((x-meanf(x,fre)).^2).*fre))/(sumfre-1),
+        m = meanf(x,fre)
+        s=(sum(((x-m).^2).*fre))/(sumfre-1),
     elseif orien=="r"|orien==1,
         sumfre=sum(fre,"r")
         if or(sumfre==0) then error(msprintf(gettext("%s: Wrong value for input argument #%d: Must be > %d.\n"),"variancef",2,1)),end
-        s=(sum(((x-ones(size(x,"r"),1)*meanf(x,fre,"r")).^2).*fre))./ ..
-        (sumfre-1)
+        m = meanf(x,fre,"r")
+        m2 = ones(size(x,"r"),1)*m
+        s=(sum(((x-m2).^2).*fre))./(sumfre-1)
     elseif orien=="c"|orien==2,
         sumfre=sum(fre,"c")
         if or(sumfre==0) then error(msprintf(gettext("%s: Wrong value for input argument #%d: Must be > %d.\n"),"variancef",2,1)),end
-        s=(sum((x-(meanf(x,fre,"c")*ones(1,size(x,"c")))).^2,"c"))./..
-        (sumfre-1)
+        m = meanf(x,fre,"c")
+        m2 = m*ones(1,size(x,"c"))
+        s=(sum((x-m2).^2,"c"))./(sumfre-1)
     else error(msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'', ''%s'', ''%s'', %d or %d expected.\n"),"variancef",3,"*","c","r",1,2))
     end
+
 endfunction
index 69fed24..5c80c8f 100644 (file)
@@ -1,85 +1,98 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
 // Copyright (C) 2008 - INRIA - Michael Baudin
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
+//
+// <-- CLI SHELL MODE -->
 // With x as a row vector and 1 argument
 data = [10 20 30 40 50 60 70 80 90];
-computed = variance(data);
-expected = 750;
-if abs(computed-expected)>%eps then bugmes();quit;end
+[Variance, Mean] = variance(data);
+expectedM = 50;
+expectedV = 750;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a column vector and 1 argument
 data = [10; 20; 30; 40; 50; 60; 70; 80; 90];
-computed = variance(data);
-expected = 750;
-if abs(computed-expected)>%eps then bugmes();quit;end
+[Variance, Mean] = variance(data);
+expectedM = 50;
+expectedV = 750;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a matrix
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data);
-expected = 712.5;
-if abs(computed-expected)>%eps then bugmes();quit;end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data);
+expectedM = 46.25;
+expectedV = 712.5;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a row vector and specified orient
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data,1);
-expected = [800. 800. 800. 1250.];
-if abs(computed-expected)>%eps then bugmes();quit;end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data, 1);
+expectedM = [30 40 50 65];
+expectedV = [800 800 800 1250];
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a row vector and specified orient
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data,"r");
-expected = [800. 800. 800. 1250.];
-if abs(computed-expected)>%eps then bugmes();quit;end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data, "r");
+expectedM = [30 40 50 65];
+expectedV = [800 800 800 1250];
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a row vector and specified orient
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data,2);
-expected = [500.;875.]/3.;
-if abs(computed-expected)>%eps then bugmes();quit;end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data, 2);
+expectedM = [50; 135]/2;
+expectedV = [500; 875]/3;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a row vector and specified orient
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data,"c");
-expected = [500.;875.]/3.;
-if abs(computed-expected)>%eps then bugmes();quit;end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data, "c");
+expectedM = [50; 135]/2;
+expectedV = [500; 875]/3;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a complex row vector and 1 argument
 a = [ 0.9, 0.7;
 0.1, 0.1;
 0.5, 0.4 ];
 data = a + a * 2 * %i;
-computed = variance(data);
-expected = 0.515;   // must be variance(real(data)) + variance(imag(data))
-if abs(computed-expected)>%eps then bugmes();quit;end
+[Variance, Mean] = variance(data);
+expectedM = 0.45+0.9*%i;
+expectedV = 0.515;
+assert_checkequal([Variance Mean], [expectedV expectedM]); // Must be variance(real(data)) + variance(imag(data))
 // With x as a complex row vector and computation by column
 a = [ 0.9, 0.7;
 0.1, 0.1;
 0.5, 0.4 ];
 data = a + a * 2 * %i;
-computed = variance(data,1);
-expected = [0.8 0.45];
-if abs(computed-expected)>%eps then bugmes();quit;end
+[Variance, Mean] = variance(data, 1);
+expectedM = [0.5+%i 0.4+0.8*%i];
+expectedV = [0.8 0.45];
+assert_checkalmostequal([Variance Mean], [expectedV expectedM]);
 // With x as a complex row vector and computation by row
 a = [ 0.9, 0.7;
 0.1, 0.1;
 0.5, 0.4 ];
 data = a + a * 2 * %i;
-computed = variance(data,2);
-expected = [0.1    
-    0.     
-    0.025];
-if abs(computed-expected)>%eps then bugmes();quit;end
+[Variance, Mean] = variance(data, 2);
+expectedM = [0.8+1.6*%i; 0.1+0.2*%i; 0.45+0.9*%i];
+expectedV = [0.1; 0; 0.025];
+assert_checkalmostequal([Variance Mean], [expectedV expectedM]);
 // Normalization with N-1
-x = [0.9    0.7  
-    0.1    0.1  
-    0.5    0.4];
+x = [0.9    0.7
+0.1    0.1
+0.5    0.4];
 orien = 1;
 w = 0;
-computed = variance(x,orien,w);
-expected = [0.16 0.09];
-if abs(computed-expected)>%eps then bugmes();quit;end
+[Variance, Mean] = variance(x,orien,w);
+expectedM = [0.5 0.4];
+expectedV = [0.16 0.09];
+assert_checkalmostequal([Variance Mean], [expectedV expectedM]);
 // Normalization with N
-x = [0.9    0.7  
-    0.1    0.1  
-    0.5    0.4];
+x = [0.9    0.7
+0.1    0.1
+0.5    0.4];
 orien = 1;
 w = 1;
-computed = variance(x,orien,w);
-expected = [0.32 0.18] / 3;
-if abs(computed-expected)>%eps then bugmes();quit;end
+[Variance, Mean] = variance(x,orien,w);
+expectedM = [0.5 0.4];
+expectedV = [0.32 0.18]/3;
+assert_checkalmostequal([Variance Mean], [expectedV expectedM]);
index fd0e789..d7909c6 100644 (file)
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
 // Copyright (C) 2008 - INRIA - Michael Baudin
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
+//
+// <-- CLI SHELL MODE -->
 
 // With x as a row vector and 1 argument
 data = [10 20 30 40 50 60 70 80 90];
-computed = variance(data);
-expected = 750;
-if abs(computed-expected)>%eps then pause,end
+[Variance, Mean] = variance(data);
+expectedM = 50;
+expectedV = 750;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a column vector and 1 argument
 data = [10; 20; 30; 40; 50; 60; 70; 80; 90];
-computed = variance(data);
-expected = 750;
-if abs(computed-expected)>%eps then pause,end
+[Variance, Mean] = variance(data);
+expectedM = 50;
+expectedV = 750;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a matrix
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data);
-expected = 712.5;
-if abs(computed-expected)>%eps then pause,end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data);
+expectedM = 46.25;
+expectedV = 712.5;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a row vector and specified orient
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data,1);
-expected = [800. 800. 800. 1250.];
-if abs(computed-expected)>%eps then pause,end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data, 1);
+expectedM = [30 40 50 65];
+expectedV = [800 800 800 1250];
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a row vector and specified orient
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data,"r");
-expected = [800. 800. 800. 1250.];
-if abs(computed-expected)>%eps then pause,end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data, "r");
+expectedM = [30 40 50 65];
+expectedV = [800 800 800 1250];
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a row vector and specified orient
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data,2);
-expected = [500.;875.]/3.;
-if abs(computed-expected)>%eps then pause,end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data, 2);
+expectedM = [50; 135]/2;
+expectedV = [500; 875]/3;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 // With x as a row vector and specified orient
-data = [10 20 30 40;50 60 70 90];
-computed = variance(data,"c");
-expected = [500.;875.]/3.;
-if abs(computed-expected)>%eps then pause,end
+data = [10 20 30 40; 50 60 70 90];
+[Variance, Mean] = variance(data, "c");
+expectedM = [50; 135]/2;
+expectedV = [500; 875]/3;
+assert_checkequal([Variance Mean], [expectedV expectedM]);
 
 // With x as a complex row vector and 1 argument
 a = [ 0.9, 0.7;
 0.1, 0.1;
 0.5, 0.4 ];
 data = a + a * 2 * %i;
-computed = variance(data);
-expected = 0.515;   // must be variance(real(data)) + variance(imag(data))
-if abs(computed-expected)>%eps then pause,end
+[Variance, Mean] = variance(data);
+expectedM = 0.45+0.9*%i;
+expectedV = 0.515;
+assert_checkequal([Variance Mean], [expectedV expectedM]); // Must be variance(real(data)) + variance(imag(data))
 
 // With x as a complex row vector and computation by column
 a = [ 0.9, 0.7;
 0.1, 0.1;
 0.5, 0.4 ];
 data = a + a * 2 * %i;
-computed = variance(data,1);
-expected = [0.8 0.45];
-if abs(computed-expected)>%eps then pause,end
+[Variance, Mean] = variance(data, 1);
+expectedM = [0.5+%i 0.4+0.8*%i];
+expectedV = [0.8 0.45];
+assert_checkalmostequal([Variance Mean], [expectedV expectedM]);
 // With x as a complex row vector and computation by row
 a = [ 0.9, 0.7;
 0.1, 0.1;
 0.5, 0.4 ];
 data = a + a * 2 * %i;
-computed = variance(data,2);
-expected = [0.1    
-    0.     
-    0.025];
-if abs(computed-expected)>%eps then pause,end
+[Variance, Mean] = variance(data, 2);
+expectedM = [0.8+1.6*%i; 0.1+0.2*%i; 0.45+0.9*%i];
+expectedV = [0.1; 0; 0.025];
+assert_checkalmostequal([Variance Mean], [expectedV expectedM]);
 
 // Normalization with N-1
-x = [0.9    0.7  
-    0.1    0.1  
-    0.5    0.4];
+x = [0.9    0.7
+0.1    0.1
+0.5    0.4];
 orien = 1;
 w = 0;
-computed = variance(x,orien,w);
-expected = [0.16 0.09];
-if abs(computed-expected)>%eps then pause,end
+[Variance, Mean] = variance(x,orien,w);
+expectedM = [0.5 0.4];
+expectedV = [0.16 0.09];
+assert_checkalmostequal([Variance Mean], [expectedV expectedM]);
 // Normalization with N
-x = [0.9    0.7  
-    0.1    0.1  
-    0.5    0.4];
+x = [0.9    0.7
+0.1    0.1
+0.5    0.4];
 orien = 1;
 w = 1;
-computed = variance(x,orien,w);
-expected = [0.32 0.18] / 3;
-if abs(computed-expected)>%eps then pause,end
-
+[Variance, Mean] = variance(x,orien,w);
+expectedM = [0.5 0.4];
+expectedV = [0.32 0.18]/3;
+assert_checkalmostequal([Variance Mean], [expectedV expectedM]);
diff --git a/scilab/modules/statistics/tests/unit_tests/variancef.dia.ref b/scilab/modules/statistics/tests/unit_tests/variancef.dia.ref
new file mode 100644 (file)
index 0000000..b954e09
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+x = [0.2113249 0.0002211 0.6653811; 0.7560439 0.9546254 0.6283918];
+fre = [1 2 3; 3 4 3];
+refM = 0.63623244375;
+refV = 0.096057419504;
+[v, m] = variancef(x, fre);
+assert_checkalmostequal([v m], [refV refM]);
+refM = [0.61986415 0.636490633333 0.64688645];
+refV = [0.479702720446 0.287821632267 0.287821632267];
+[v, m] = variancef(x, fre, "r");
+assert_checkalmostequal([v m], [refV refM]);
+refM = [0.367985066667; 0.79718087];
+refV = [0.049647428728; 0.006107864498];
+[v, m] = variancef(x, fre, "c");
+assert_checkalmostequal([v m], [refV refM]);
diff --git a/scilab/modules/statistics/tests/unit_tests/variancef.tst b/scilab/modules/statistics/tests/unit_tests/variancef.tst
new file mode 100644 (file)
index 0000000..f2d42ee
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+
+x = [0.2113249 0.0002211 0.6653811; 0.7560439 0.9546254 0.6283918];
+fre = [1 2 3; 3 4 3];
+
+refM = 0.63623244375;
+refV = 0.096057419504;
+[v, m] = variancef(x, fre);
+assert_checkalmostequal([v m], [refV refM]);
+
+refM = [0.61986415 0.636490633333 0.64688645];
+refV = [0.479702720446 0.287821632267 0.287821632267];
+[v, m] = variancef(x, fre, "r");
+assert_checkalmostequal([v m], [refV refM]);
+
+refM = [0.367985066667; 0.79718087];
+refV = [0.049647428728; 0.006107864498];
+[v, m] = variancef(x, fre, "c");
+assert_checkalmostequal([v m], [refV refM]);