5290ff254c02493c43701e18d2d699787e96f266
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2000 - INRIA - Carlos Klimann
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 //
12 function [s]=variance(x,orien,w)
13 //
14 //This function computes  the  variance  of  the values of  a  vector or
15 //matrix x.
16 //
17 //For a vector or   a matrix x,  s=variance(x)  returns in  the scalar s  the
18 //variance of all the entries of x.
19 //
20 //s=variance(x,'r')    (or,  equivalently,    s=variance(x,1)) is     the  rowwise
21 //variance. It returns in each entry of the row vector s the variance of
22 //each column of x.
23 //
24 //s=variance(x,'c') (or, equivalently, s=variance(x,2)) is the columnwise standard
25 //deviation.   It  returns in  each  entry  of the   column vector y the
26 //variance of each row of x.
27 //
28 //
29   if x==[] then
30     s=%nan;
31     return;
32   end
33   [lhs,rhs]=argn(0)
34   if rhs==0 then
35     error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"variance",1,2))
36   end
37   [m n]=size(x);
38   if rhs<=2 then
39     w=0;
40   end
41   if rhs==1
42     if w==0 then
43       s=(sum((x-mean(x)).^2))/(m*n-1);
44     elseif w==1 then
45       s=(sum((x-mean(x)).^2))/(m*n);
46     else
47       error(msprintf(gettext("%s: Wrong value of w : %d; 0 or 1 expected.\n"),"variance",w))
48     end
49   elseif orien=='c'|orien==2 then
50     y(1:m,1:n) = x(1:m,1:n) -  mean(x,2) * ones(1,n);
51     s = ones(m,1);
52     for i=1:m
53       s(i) = real(y(i,1:n) * y(i,1:n)');
54       if w==0 then
55         s(i) = s(i) / (n - 1);
56       elseif w==1 then
57         s(i) = s(i) / n;
58       else
59         error(msprintf(gettext("%s: Wrong value of w : %d; 0 or 1 expected.\n"),"variance",w))
60       end
61     end
62   elseif orien=='r'|orien==1 then
63     y(1:m,1:n) = x(1:m,1:n) - ones(m,1) * mean(x,1);
64     s = ones(1,n);
65     for i=1:n
66       s(i) = real(y(1:m,i)' * y(1:m,i));
67       if w==0 then
68         s(i) = s(i) / (m - 1);
69       elseif w==1 then
70         s(i) = s(i) / m;
71       else
72         error(msprintf(gettext("%s: Wrong value of w : %d; 0 or 1 expected.\n"),"variance",w))
73       end
74     end
75   else
76     error(msprintf(gettext("%s: Wrong value for input argument: ''%s'', ''%s'', %d or %d expected.\n"),"variance","c","r",1,2));
77   end
78 endfunction