X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fnan-2.5.5%2Fnanstd.m;fp=octave_packages%2Fnan-2.5.5%2Fnanstd.m;h=226722c2cca80acf6c492e533d0fb82524184f2b;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/nan-2.5.5/nanstd.m b/octave_packages/nan-2.5.5/nanstd.m new file mode 100644 index 0000000..226722c --- /dev/null +++ b/octave_packages/nan-2.5.5/nanstd.m @@ -0,0 +1,71 @@ +function [y] = nanstd(x,FLAG,DIM) +% NANSTD same as STD but ignores NaN's. +% NANSTD is OBSOLETE; use NaN/STD instead. NANSTD is included +% to fix a bug in alternative implementations and to +% provide some compatibility. +% +% Y = nanstd(x, FLAG, [,DIM]) +% +% x data +% FLAG 0: [default] normalizes with (N-1), N = sample size +% FLAG 1: normalizes with N, N = sample size +% DIM dimension +% 1 sum of columns +% 2 sum of rows +% default or []: first DIMENSION with more than 1 element +% Y resulting standard deviation +% +% see also: SUM, SUMSKIPNAN, NANSUM, STD + +% $Id: nanstd.m 9033 2011-11-08 20:58:07Z schloegl $ +% Copyright (C) 2000-2003,2006,2008,2009,2010 by Alois Schloegl +% This is part of the NaN-toolbox. For more details see +% http://pub.ist.ac.at/~schloegl/matlab/NaN/ + +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; If not, see . + +if nargin<2, + FLAG = 0; +end; + +if nargin<3, + DIM = []; +end; +if isempty(FLAG), + FLAG = 0; +end; +if isempty(DIM), + DIM = find(size(x)>1,1); + if isempty(DIM), DIM=1; end; +end; + +[y,n,ssq] = sumskipnan(x,DIM); +if all(ssq(:).*n(:) > 2*(y(:).^2)), + %% rounding error is neglectable + y = ssq - y.*y./n; +else + %% rounding error is not neglectable + [y,n] = sumskipnan(center(x,DIM).^2,DIM); +end; + +if (FLAG==1) + y = sqrt(y)./n; % normalize with N +else + % default method + y = sqrt(y./max(n-1,0)); % normalize with N-1 +end; + + +%!assert(nanstd(0),NaN) +