2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 1999 - INRIA - Carlos Klimann
4 //
5 // Copyright (C) 2012 - 2016 - Scilab Enterprises
6 //
7 // This file is hereby licensed under the terms of the GNU GPL v2.0,
8 // pursuant to article 5.3.4 of the CeCILL v.2.1.
9 // This file was originally licensed under the terms of the CeCILL v2.1,
10 // and continues to be available under such terms.
11 // For more information, see the COPYING file which you should have received
12 // along with this program.
13 //
16 function [s,index] = nanmin(x,orient)
17     //
18     //This function gives for a real or a numerical matrix  x a his smallest
19     //element m (but ignoring the NANs).
20     //
21     //For x,  a numerical vector or matrix,  m=nanmin(x) returns in scalar m
22     //the smallest element of x  (ignoring the NANs).   The form [m,index] =
23     //nanmin(x,orient)   gives  in addition  of  the  value  of the smallest
24     //element of x (ignoring the NANs) in scalar  m, index the index of this
25     //element in x, as a 2-vector.
26     //
27     //m=nanmin(x,'r')    gives in  the  1xsize(x,2)   matrix  m the smallest
28     //elements  (ignoring  the  NANs) of  each  column  of  x.   If the form
29     //[m,index]=nanmin(x,'r')  is used,   the  elements of  the  1xsize(x,2)
30     //matrix are the indexes of the smallest elements (ignoring the NANs) of
31     //each column of x in the corresponding column.
32     //
33     //m=nanmin(x,'c')   gives in   the  size(x,2)x1 matrix   m  the smallest
34     //elements  (ignoring  the  NANs)  of  each row   of  x.    If the  form
35     //[m,index]=nanmin(x,'c')  is   used, the  elements   of the size(x,2)x1
36     //matrix are the indexes of the smallest elements (ignoring the NANs) of
37     //each row of x in the corresponding row.
38     //
39     //
41     warnobsolete("min", "6.1");
43     [lhs, rhs] = argn(0)
44     if rhs == 0 then
45         error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"nanmin",1,2))
46     end
47     if rhs==1 then  orient="*",end
48     if orient==1 then orient="r",end
49     if orient==2 then orient="c",end
50     if x==[]|(size(x,"*")==1&isnan(x)) then s=[],index=[],return,end
51     isn=isnan(x)
52     x(isn)=%inf
53     [s,index]=min(x,orient)
54     s(find(and(isn,orient)))=%nan
56 endfunction