Bump version numbers to 6.2.0
[scilab.git] / scilab / modules / overloading / macros / %hm_stdev.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 function x = %hm_stdev(m, d, ms)
14     // d: 0, 1, 2...
15     if argn(2) < 3 then
16         ms = %f
17     end
18     if argn(2) == 3 & type(ms)~=1 then
19         msg = _("%s: Wrong type for input argument #%d: A real matrix expected.\n")
20         error(msprintf(msg, "stdev", 3));
21     end
22     if d > length(size(m)) then
23         msg = _("%s: Wrong value for input argument #%d: integer <= ndims(argument #%d) expected.\n")
24         error(msprintf(msg,"stdev",2,1));
25     end
26
27     if argn(2) == 1 | d==0 then
28         if argn(2) == 3 then
29             x = stdev(m(:), "*", ms);
30         else
31             x = stdev(m(:), "*");
32         end
33         return
34     end
35     dims = size(m);
36     N = size(dims, "*");
37     p1 = prod(dims(1:d-1));// step to build one vector on which stdev is applied
38     p2 = p1*dims(d);//step for beginning of next vectors
39     ind = (0:p1:p2-1)';// selection for building one vector
40     deb = (1:p1);
41     I = ind*ones(deb)+ones(ind)*deb;
42
43     ind = (0:p2:prod(dims)-1);
44     I = ones(ind).*.I+ind.*.ones(I);
45
46     if argn(2) == 3 then
47         if isscalar(ms) then
48             x = stdev(matrix(m(I),dims(d),-1), 1, ms);
49         else
50             x = stdev(matrix(m(I),dims(d),-1), 1, ms(:)');
51         end
52     else
53         x = stdev(matrix(m(I),dims(d),-1), 1);
54     end
55     dims(d) = 1;
56     x = matrix(x, dims)
57 endfunction