* Bug #11896 fixed - Deprecating 'mvvacov()' into 'cov()', adding a normalization... 28/11128/11
Paul BIGNIER [Thu, 28 Mar 2013 08:04:10 +0000 (09:04 +0100)]
The new feature allows to switch between the best estimate of the
covariance matrix (mvvacov), and the second moment about the mean

Change-Id: I001ef31161cde451a96bc23b17adfc7e3366885e

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

diff --git a/SEP/SEP_093_cov.odt b/SEP/SEP_093_cov.odt
new file mode 100644 (file)
index 0000000..f74b40e
Binary files /dev/null and b/SEP/SEP_093_cov.odt differ
index f92083b..db7009a 100644 (file)
@@ -17,6 +17,7 @@ BDF methods with direct and preconditioned Krylov linear solvers, from ODEPACK.
 * New functions introduced:
  - getURL - Download an URL (HTTP, HTTPS, FTP...)
  - splitURL - Split a URL (HTTP, HTTPS, FTP...)
+ - cov - Covariance matrix. Deprecates 'mvvacov'. See bug #11896 fixed.
 
 * Add a complete set of functions to read and write any HDF5 file from Scilab.
 
@@ -62,12 +63,12 @@ Bug fixes
 
 * Bug #12163 fixed - unzoom did not work with a single input argument.
 
+* Bug #12443 fixed - Document behavior of mopen() in text file mode
+                     on Windows.
+
 * Bug #12463 fixed - Bad specification for rect=[x,y,w,h] argument in french help
                      page of xstringb.
 
 * Bug #12473 fixed - Problems with "é" in french help page of mkdir.
 
-* Bug #12443 fixed - Document behavior of mopen() in text file mode
-                     on Windows.
-
 * Bug #12475 fixed - csvRead() does not support double quoted fields.
diff --git a/scilab/modules/statistics/help/en_US/descriptive_statistics/cov.xml b/scilab/modules/statistics/help/en_US/descriptive_statistics/cov.xml
new file mode 100644 (file)
index 0000000..b4d2c78
--- /dev/null
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ *
+ * Copyright (C) 2012-2013 - Michael Baudin
+ * Copyright (C) 2009-2010 - DIGITEO - Michael Baudin
+ * Copyright (C) 1993 - 1995 - Anders Holtsberg
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ -->
+
+<refentry version="5.0-subset Scilab" xml:id="cov" xml:lang="en"
+          xmlns="http://docbook.org/ns/docbook"
+          xmlns:xlink="http://www.w3.org/1999/xlink"
+          xmlns:svg="http://www.w3.org/2000/svg"
+          xmlns:ns3="http://www.w3.org/1999/xhtml"
+          xmlns:mml="http://www.w3.org/1998/Math/MathML"
+          xmlns:scilab="http://www.scilab.org"
+          xmlns:db="http://docbook.org/ns/docbook">
+    <refnamediv>
+        <refname>cov</refname>
+        <refpurpose>Covariance matrix</refpurpose>
+    </refnamediv>
+    <refsynopsisdiv>
+        <title>Calling Sequence</title>
+        <synopsis>
+            C = cov(x)
+            C = cov(x, 0)
+            C = cov(x, 1)
+            C = cov(x, y)
+            C = cov(x, y, 0)
+            C = cov(x, y, 1)
+        </synopsis>
+    </refsynopsisdiv>
+    <refsection>
+        <title>Parameters</title>
+        <variablelist>
+            <varlistentry>
+                <term>x</term>
+                <listitem>
+                    <para> a nobs-by-1 or nobs-by-nvar matrix of doubles</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>y</term>
+                <listitem>
+                    <para> a nobs-by-1 or nobs-by-nvar matrix of doubles</para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>C</term>
+                <listitem>
+                    <para> a square matrix of doubles, the empirical covariance</para>
+                </listitem>
+            </varlistentry>
+        </variablelist>
+    </refsection>
+    <refsection>
+        <title>Description</title>
+        <para>
+            If x is a nobs-by-1 matrix,
+            then <literal>cov(x)</literal> returns the variance of x,
+            normalized by nobs-1.
+        </para>
+        <para>
+            If x is a nobs-by-nvar matrix,
+            then <literal>cov(x)</literal> returns the nvar-by-nvar covariance matrix of the
+            columns of x, normalized by nobs-1.
+            Here, each column of x is a variable and
+            each row of x is an observation.
+        </para>
+        <para>
+            If x and y are two nobs-by-1 matrices,
+            then <literal>cov(x, y)</literal> returns the 2-by-2 covariance matrix of x and
+            y, normalized by nobs-1, where nobs is the number of observations.
+        </para>
+        <para>
+            <literal>cov(x, 0)</literal> is the same as <literal>cov(x)</literal> and
+            <literal>cov(x, y, 0)</literal> is the same as <literal>cov(x, y)</literal>.
+            In this case, if the population is from a normal distribution,
+            then C is the best unbiased estimate of the covariance matrix.
+        </para>
+        <para>
+            <literal>cov(x, 1)</literal> and <literal>cov(x, y, 1)</literal> normalize by nobs.
+            In this case, C is the second moment matrix of the
+            observations about their mean.
+        </para>
+        <para>
+            The covariance of X and Y is defined by:
+        </para>
+        <para>
+            <latex>
+                Cov(X, Y) = E( (X-E(X)) (Y-E(Y))^T )
+            </latex>
+        </para>
+        <para>
+            where E is the expectation.
+        </para>
+        <para>
+            This function is compatible with Matlab.
+        </para>
+        <para>
+        </para>
+    </refsection>
+    <refsection>
+        <title>Examples</title>
+        <programlisting role="example"><![CDATA[
+x = [1; 2];
+y = [3; 4];
+C = cov(x, y)
+expected = [0.5, 0.5; 0.5, 0.5];
+C = cov([x, y])
+   ]]></programlisting>
+        <programlisting role="example"><![CDATA[
+x = [230; 181; 165; 150; 97; 192; 181; 189; 172; 170];
+y = [125; 99; 97; 115; 120; 100; 80; 90; 95; 125];
+expected = [
+1152.4556, -88.911111
+-88.911111, 244.26667
+];
+C = cov(x, y)
+C = cov([x, y])
+   ]]></programlisting>
+        <programlisting role="example"><![CDATA[
+// Source [3]
+A = [
+4.0 2.0 0.60
+4.2 2.1 0.59
+3.9 2.0 0.58
+4.3 2.1 0.62
+4.1 2.2 0.63
+];
+S = [
+0.025 0.0075 0.00175
+0.0075 0.007 0.00135
+0.00175 0.00135 0.00043
+];
+C = cov(A)
+   ]]></programlisting>
+    </refsection>
+    <refsection>
+        <title>Bibliography</title>
+        <para>
+            <ulink url="http://en.wikipedia.org/wiki/Covariance_matrix">Wikipedia: Covariance matrix</ulink>
+        </para>
+        <para>
+            [3] <ulink url="http://www.itl.nist.gov/div898/handbook/pmc/section5/pmc541.htm">NIST/SEMATECH e-Handbook of Statistical Methods, 6.5.4.1. Mean Vector and Covariance Matrix</ulink>
+        </para>
+        <para>
+            "Introduction to probability and statistics for engineers and scientists", Sheldon Ross
+        </para>
+    </refsection>
+    <refsection>
+        <title>History</title>
+        <revhistory>
+            <revision>
+                <revnumber>5.5.0</revnumber>
+                <revdescription>cov function added, to improve mvvacov (deprecated)</revdescription>
+            </revision>
+        </revhistory>
+    </refsection>
+</refentry>
index 7a90b39..00bc99b 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="mvvacov">
     <refnamediv>
-        <refname>mvvacov</refname>
-        <refpurpose>computes  variance-covariance matrix</refpurpose>
+        <refname>mvvacov (deprecated)</refname>
+        <refpurpose>
+            computes variance-covariance matrix <emphasis role="bold">This function is obsolete.</emphasis>
+        </refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Calling Sequence</title>
             moment of a variable, xi is the i-th variable and xibar
             the mean of the xi variable.
         </para>
+        <para>
+            WARNING: This function has been replaced by <link linkend="cov">cov</link>.
+        </para>
     </refsection>
     <refsection>
         <title>Examples</title>
-        <programlisting role="example"><![CDATA[ 
+        <programlisting role="example"><![CDATA[
 x=[0.2113249 0.0002211 0.6653811;0.7560439 0.4453586 0.6283918]
 v=mvvacov(x)
  ]]></programlisting>
@@ -55,4 +60,16 @@ v=mvvacov(x)
             Saporta, Gilbert, Probabilites,  Analyse des Donnees et Statistique, Editions Technip, Paris, 1990.  Mardia,  K.V., Kent,  J.T. &amp;  Bibby,  J.M., Multivariate Analysis, Academic Press, 1979.
         </para>
     </refsection>
+    <refsection>
+        <title>History</title>
+        <revhistory>
+            <revision>
+                <revnumber>5.5.0</revnumber>
+                <revdescription>
+                    Function tagged obsolete. Will be removed in 6.0.0.
+                    See the <link linkend="cov">cov</link> function.
+                </revdescription>
+            </revision>
+        </revhistory>
+    </refsection>
 </refentry>
diff --git a/scilab/modules/statistics/macros/cov.sci b/scilab/modules/statistics/macros/cov.sci
new file mode 100644 (file)
index 0000000..2b1c607
--- /dev/null
@@ -0,0 +1,201 @@
+// Copyright (C) 2012-2013 - Michael Baudin
+// Copyright (C) 2009-2010 - DIGITEO - Michael Baudin
+// Copyright (C) 1993 - 1995 - Anders Holtsberg
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+function C = cov(varargin)
+    // Covariance matrix
+    //
+    // Calling Sequence
+    //   C = cov(x)
+    //   C = cov(x, 0)
+    //   C = cov(x, 1)
+    //   C = cov(x, y)
+    //   C = cov(x, y, 0)
+    //   C = cov(x, y, 1)
+    //
+    // Parameters
+    // x: a nobs-by-1 or nobs-by-nvar matrix of doubles
+    // y: a nobs-by-1 or nobs-by-nvar matrix of doubles
+    // C: a square matrix of doubles, the empirical covariance
+    //
+    // Description
+    // If x is a nobs-by-1 matrix,
+    // then cov(x) returns the variance of x,
+    // normalized by nobs-1.
+    //
+    // If x is a nobs-by-nvar matrix,
+    // then cov(x) returns the nvar-by-nvar covariance matrix of the
+    // columns of x, normalized by nobs-1.
+    // Here, each column of x is a variable and
+    // each row of x is an observation.
+    //
+    // If x and y are two nobs-by-1 matrices,
+    // then cov(x, y) returns the 2-by-2 covariance matrix of x and
+    // y, normalized by nobs-1, where nobs is the number of observations.
+    //
+    // cov(x, 0) is the same as cov(x) and
+    // cov(x, y, 0) is the same as cov(x, y).
+    // In this case, if the population is from a normal distribution,
+    // then C is the best unbiased estimate of the covariance matrix.
+    //
+    // cov(x, 1) and cov(x, y, 1) normalize by nobs.
+    // In this case, C is the second moment matrix of the
+    // observations about their mean.
+    //
+    // The covariance of X and Y is defined by:
+    //
+    // Cov(X, Y) = E( (X-E(X)) (Y-E(Y))^T )
+    //
+    // where E is the expectation.
+    //
+    // This function is compatible with Matlab.
+    //
+    // Examples
+    // x = [1; 2];
+    // y = [3; 4];
+    // C = cov(x, y)
+    // expected = [0.5, 0.5; 0.5, 0.5]
+    // C = cov([x, y])
+    //
+    // x = [230; 181; 165; 150; 97; 192; 181; 189; 172; 170];
+    // y = [125; 99; 97; 115; 120; 100; 80; 90; 95; 125];
+    // expected = [
+    // 1152.4556, -88.911111
+    // -88.911111, 244.26667
+    // ]
+    // C = cov(x, y)
+    // C = cov([x, y])
+    //
+    // // Source [3]
+    // A = [
+    // 4.0 2.0 0.60
+    // 4.2 2.1 0.59
+    // 3.9 2.0 0.58
+    // 4.3 2.1 0.62
+    // 4.1 2.2 0.63
+    // ];
+    // S = [
+    // 0.025 0.0075 0.00175
+    // 0.0075 0.007 0.00135
+    // 0.00175 0.00135 0.00043
+    // ];
+    // C = cov(A)
+    //
+    // Bibliography
+    // [1] http://en.wikipedia.org/wiki/Covariance_matrix
+    // [2] "Introduction to probability and statistics for engineers and scientists.", Sheldon Ross
+    // [3] NIST/SEMATECH e-Handbook of Statistical Methods, 6.5.4.1. Mean Vector and Covariance Matrix, http://www.itl.nist.gov/div898/handbook/pmc/section5/pmc541.htm
+
+
+    [lhs, rhs]=argn()
+    //
+    if (rhs == 1) then
+        x = varargin(1)
+        //
+        // Check type
+        if (typeof(x) <> "constant")
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: a real matrix expected.\n"),"cov", 1));
+        end
+        nobs = size(x, "r")
+        r = 1/(nobs-1)
+        A = x
+    elseif (rhs == 2) then
+        //
+        x = varargin(1)
+        y = varargin(2)
+        //
+        // Check type
+        if (typeof(x) <> "constant")
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: a real matrix expected.\n"),"cov", 1));
+        end
+        if (typeof(y) <> "constant")
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: an integer or a real matrix expected.\n"),"cov", 2));
+        end
+        //
+        // Check size
+        nobs = size(x, "r")
+        if (size(y, "*") == 1) then
+            if (y <> 0 & y <> 1)
+                error(msprintf(gettext("%s: Wrong value for input argument #%d: %d or %d expected.\n"),"cov", 2, 0, 1));
+            end
+            if (y == 1) then
+                r = 1/nobs
+                A = x
+            elseif (y == 0) then
+                r = 1/(nobs-1)
+                A = x
+            end
+        else
+            if (size(x) <> [nobs 1]) then
+                error(msprintf(gettext("%s: Wrong size for input argument #%d: %dx%d expected.\n"),"cov", 1, nobs, 1));
+            end
+            if (size(y) <> [nobs 1]) then
+                error(msprintf(gettext("%s: Wrong size for input argument #%d: %dx%d expected.\n"),"cov", 2, nobs, 1));
+            end
+            r = 1/(nobs-1)
+            A = [x, y]
+        end
+    elseif (rhs == 3) then
+        //
+        x = varargin(1)
+        y = varargin(2)
+        nrmlztn = varargin(3)
+        //
+        // Check type
+        if (typeof(x) <> "constant")
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: a real matrix expected.\n"),"cov", 1));
+        end
+        if (typeof(x) <> "constant")
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: a real matrix expected.\n"),"cov", 2));
+        end
+        if (typeof(x) <> "constant")
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: an integer expected.\n"),"cov", 3));
+        end
+        //
+        // Check size
+        nobs = size(x, "r")
+        if (size(x) <> [nobs 1]) then
+            error(msprintf(gettext("%s: Wrong size for input argument #%d: %dx%d expected.\n"),"cov", 1, nobs, 1));
+        end
+        if (size(y) <> [nobs 1]) then
+            error(msprintf(gettext("%s: Wrong size for input argument #%d: %dx%d expected.\n"),"cov", 2, nobs, 1));
+        end
+        if (size(nrmlztn, "*") <> 1) then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: an integer expected.\n"),"cov", 3));
+        end
+        //
+        // Check content
+        if (nrmlztn <> 0 & nrmlztn <> 1)
+            error(msprintf(gettext("%s: Wrong value for inputDDDD argument #%d: %d or %d expected.\n"),"cov", 3, 0, 1));
+        end
+        A = [x, y]
+        if (nrmlztn == 1) then
+            r = 1/nobs
+        else
+            r = 1/(nobs-1)
+        end
+    else
+        error(msprintf(gettext("%s: Wrong number of input argument(s): %d, %d or %d expected.\n"),"cov", 1, 2, 3));
+    end
+    //
+    // Compute with A in the general case
+    nvar = size(A, "c")
+    nobs = size(A, "r")
+    for i = 1:nvar
+        A(:,i) = A(:,i) - mean(A(:,i))
+    end
+    C = zeros(nvar, nvar)
+    for i = 1:nvar
+        C(i,i) = A(:,i)'*A(:,i)*r
+        for j = i+1:nvar
+            C(i,j) = A(:,i)'*A(:,j)*r
+            C(j,i) = C(i,j)
+        end
+    end
+endfunction
index 950fe80..75b291b 100644 (file)
@@ -1,36 +1,37 @@
 
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2001 - INRIA - Carlos Klimann
-// 
+//
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
-// 
+//
 
 
 function [v]=mvvacov(x)
-//
-//This    function    computes    v,   the    matrix    of
-//variance-covariance of the "tableau" x (x is a numerical
-//matrix nxp)  who gives  the values of  p variables for n
-//individuals:   the    (i,j)   coefficient   of    v   is
-//v(i,j)=E(xi-xibar)(xj-xjbar),  where   E  is  the  first
-//moment of a variable, xi  is the i-th variable and xibar
-//the mean of the xi variable.
-//
-//References: Saporta, Gilbert, Probabilites,  Analyse des
-//Donnees et Statistique, Editions Technip, Paris, 1990.
-//Mardia,  K.V., Kent,  J.T. &  Bibby,  J.M., Multivariate
-//Analysis, Academic Press, 1979.
-//
-//
-  if x==[] then s=%nan, return, end
-  [lhs,rhs]=argn(0)
-  if rhs<>1 then error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"mvvacov",1)), end
-  [n p]=size(x);
-  fact=1/n
-  v=fact*((x'*x)-(fact*(x'*ones(n,1)*ones(1,n))*x))
+    //
+    //This    function    computes    v,   the    matrix    of
+    //variance-covariance of the "tableau" x (x is a numerical
+    //matrix nxp)  who gives  the values of  p variables for n
+    //individuals:   the    (i,j)   coefficient   of    v   is
+    //v(i,j)=E(xi-xibar)(xj-xjbar),  where   E  is  the  first
+    //moment of a variable, xi  is the i-th variable and xibar
+    //the mean of the xi variable.
+    //
+    //References: Saporta, Gilbert, Probabilites,  Analyse des
+    //Donnees et Statistique, Editions Technip, Paris, 1990.
+    //Mardia,  K.V., Kent,  J.T. &  Bibby,  J.M., Multivariate
+    //Analysis, Academic Press, 1979.
+    //
+    //
+    warnobsolete("cov", "6.0.0");
+    if x==[] then s=%nan, return, end
+    [lhs,rhs]=argn(0)
+    if rhs<>1 then error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"mvvacov",1)), end
+    [n p]=size(x);
+    fact=1/n
+    v=fact*((x'*x)-(fact*(x'*ones(n,1)*ones(1,n))*x))
 endfunction
 
diff --git a/scilab/modules/statistics/tests/unit_tests/cov.dia.ref b/scilab/modules/statistics/tests/unit_tests/cov.dia.ref
new file mode 100644 (file)
index 0000000..98bc336
--- /dev/null
@@ -0,0 +1,123 @@
+// Copyright (C) 2012-2013 - Michael Baudin
+// Copyright (C) 2010 - INRIA - Michael Baudin
+//
+// This file must be used under the terms of the GNU Lesser General Public License license :
+// http://www.gnu.org/copyleft/lesser.html
+// Run with test_run('statistics', 'cov', ['no_check_error_output']);
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+x = [1;2];
+y = [3;4];
+computed = cov (x,y);
+expected = [0.5,0.5;0.5,0.5];
+assert_checkequal ( computed , expected );
+//
+// The same, with nrmlztn=0
+x = [1;2];
+y = [3;4];
+computed = cov (x,y,0);
+expected = [0.5,0.5;0.5,0.5];
+assert_checkequal ( computed , expected );
+//
+x = [230;181;165;150;97;192;181;189;172;170];
+y = [125;99;97;115;120;100;80;90;95;125];
+expected = [1152.4556,-88.911111;-88.911111,244.26667];
+computed = cov (x,y);
+assert_checkalmostequal ( computed , expected , 1.e-7 );
+//
+// The same, with nrmlztn=0
+x = [230;181;165;150;97;192;181;189;172;170];
+y = [125;99;97;115;120;100;80;90;95;125];
+expected = [1152.4556,-88.911111;-88.911111,244.26667];
+computed = cov (x,y,0);
+assert_checkalmostequal ( computed , expected , 1.e-7 );
+//
+x = [1;2;3;4;5];
+computed = cov (x);
+expected = 2.5;
+assert_checkequal ( computed , expected );
+//
+// The same, with nrmlztn=0
+x = [1;2;3;4;5];
+computed = cov (x,0);
+expected = 2.5;
+assert_checkequal ( computed , expected );
+//
+A = [-1 1 2 ; -2 3 1 ; 4 0 3];
+Cexpected = [
+   10.3333   -4.1667    3.0000
+   -4.1667    2.3333   -1.5000
+    3.0000   -1.5000    1.0000
+];
+C = cov (A);
+assert_checkalmostequal ( Cexpected , C , [] , 1.e-4, "element");
+//
+// The same, with nrmlztn=0
+A = [-1 1 2 ; -2 3 1 ; 4 0 3];
+Cexpected = [
+   10.3333   -4.1667    3.0000
+   -4.1667    2.3333   -1.5000
+    3.0000   -1.5000    1.0000
+];
+C = cov(A,0);
+assert_checkalmostequal ( Cexpected , C , [] , 1.e-4, "element");
+//
+// Reference
+// 6.5.4.1. Mean Vector and Covariance Matrix
+// http://www.itl.nist.gov/div898/handbook/pmc/section5/pmc541.htm
+A = [
+4.0 2.0 0.60
+4.2 2.1 0.59
+3.9 2.0 0.58
+4.3 2.1 0.62
+4.1 2.2 0.63
+];
+S = [
+0.025 0.0075 0.00175
+0.0075 0.007 0.00135
+0.00175 0.00135 0.00043
+];
+C = cov (A);
+assert_checkalmostequal ( S , C , 10*%eps , [] , "element");
+//
+// The same, with nrmlztn=0
+A = [
+4.0 2.0 0.60
+4.2 2.1 0.59
+3.9 2.0 0.58
+4.3 2.1 0.62
+4.1 2.2 0.63
+];
+S = [
+0.025 0.0075 0.00175
+0.0075 0.007 0.00135
+0.00175 0.00135 0.00043
+];
+C = cov (A,0);
+assert_checkalmostequal ( S , C , 10*%eps , [] , "element");
+//
+x = [1;2];
+computed = cov (x,1);
+expected = 0.25;
+assert_checkequal ( computed , expected );
+//
+x = [1;2];
+computed = cov (x,0);
+expected = 0.5;
+assert_checkequal ( computed , expected );
+//
+x = [1;2];
+y = [3;4];
+computed = cov (x,y,1);
+expected = [0.25,0.25;0.25,0.25];
+assert_checkequal ( computed , expected );
+//
+// Matlab compatibility
+x=[-1 1 2 ; -2 3 1 ; 4 0 3];
+computed = cov (x);
+expected = [
+   10.3333   -4.1667    3.0000
+   -4.1667    2.3333   -1.5000
+    3.0000   -1.5000    1.0000
+];
+assert_checkalmostequal ( computed , expected ,[],1.e-4);
diff --git a/scilab/modules/statistics/tests/unit_tests/cov.tst b/scilab/modules/statistics/tests/unit_tests/cov.tst
new file mode 100644 (file)
index 0000000..27f3629
--- /dev/null
@@ -0,0 +1,127 @@
+// Copyright (C) 2012-2013 - Michael Baudin
+// Copyright (C) 2010 - INRIA - Michael Baudin
+//
+// This file must be used under the terms of the GNU Lesser General Public License license :
+// http://www.gnu.org/copyleft/lesser.html
+
+// Run with test_run('statistics', 'cov', ['no_check_error_output']);
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+
+
+x = [1;2];
+y = [3;4];
+computed = cov (x,y);
+expected = [0.5,0.5;0.5,0.5];
+assert_checkequal ( computed , expected );
+//
+// The same, with nrmlztn=0
+x = [1;2];
+y = [3;4];
+computed = cov (x,y,0);
+expected = [0.5,0.5;0.5,0.5];
+assert_checkequal ( computed , expected );
+//
+x = [230;181;165;150;97;192;181;189;172;170];
+y = [125;99;97;115;120;100;80;90;95;125];
+expected = [1152.4556,-88.911111;-88.911111,244.26667];
+computed = cov (x,y);
+assert_checkalmostequal ( computed , expected , 1.e-7 );
+//
+// The same, with nrmlztn=0
+x = [230;181;165;150;97;192;181;189;172;170];
+y = [125;99;97;115;120;100;80;90;95;125];
+expected = [1152.4556,-88.911111;-88.911111,244.26667];
+computed = cov (x,y,0);
+assert_checkalmostequal ( computed , expected , 1.e-7 );
+//
+x = [1;2;3;4;5];
+computed = cov (x);
+expected = 2.5;
+assert_checkequal ( computed , expected );
+//
+// The same, with nrmlztn=0
+x = [1;2;3;4;5];
+computed = cov (x,0);
+expected = 2.5;
+assert_checkequal ( computed , expected );
+//
+A = [-1 1 2 ; -2 3 1 ; 4 0 3];
+Cexpected = [
+   10.3333   -4.1667    3.0000
+   -4.1667    2.3333   -1.5000
+    3.0000   -1.5000    1.0000
+];
+C = cov (A);
+assert_checkalmostequal ( Cexpected , C , [] , 1.e-4, "element");
+//
+// The same, with nrmlztn=0
+A = [-1 1 2 ; -2 3 1 ; 4 0 3];
+Cexpected = [
+   10.3333   -4.1667    3.0000
+   -4.1667    2.3333   -1.5000
+    3.0000   -1.5000    1.0000
+];
+C = cov(A,0);
+assert_checkalmostequal ( Cexpected , C , [] , 1.e-4, "element");
+//
+// Reference
+// 6.5.4.1. Mean Vector and Covariance Matrix
+// http://www.itl.nist.gov/div898/handbook/pmc/section5/pmc541.htm
+A = [
+4.0 2.0 0.60
+4.2 2.1 0.59
+3.9 2.0 0.58
+4.3 2.1 0.62
+4.1 2.2 0.63
+];
+S = [
+0.025 0.0075 0.00175
+0.0075 0.007 0.00135
+0.00175 0.00135 0.00043
+];
+C = cov (A);
+assert_checkalmostequal ( S , C , 10*%eps , [] , "element");
+//
+// The same, with nrmlztn=0
+A = [
+4.0 2.0 0.60
+4.2 2.1 0.59
+3.9 2.0 0.58
+4.3 2.1 0.62
+4.1 2.2 0.63
+];
+S = [
+0.025 0.0075 0.00175
+0.0075 0.007 0.00135
+0.00175 0.00135 0.00043
+];
+C = cov (A,0);
+assert_checkalmostequal ( S , C , 10*%eps , [] , "element");
+//
+x = [1;2];
+computed = cov (x,1);
+expected = 0.25;
+assert_checkequal ( computed , expected );
+//
+x = [1;2];
+computed = cov (x,0);
+expected = 0.5;
+assert_checkequal ( computed , expected );
+//
+x = [1;2];
+y = [3;4];
+computed = cov (x,y,1);
+expected = [0.25,0.25;0.25,0.25];
+assert_checkequal ( computed , expected );
+//
+// Matlab compatibility
+x=[-1 1 2 ; -2 3 1 ; 4 0 3];
+computed = cov (x);
+expected = [
+   10.3333   -4.1667    3.0000
+   -4.1667    2.3333   -1.5000
+    3.0000   -1.5000    1.0000
+];
+assert_checkalmostequal ( computed , expected ,[],1.e-4);