diff scripts/statistics/distributions/poissinv.m @ 20644:4e307c55a2b5

Use isempty () rather than any () for faster code in inverse statistical distributions. betainv.m, binoinv.m, gaminv.m, poissinv.m: Use '! isempty (k)' rather than 'any (k)' for faster code.
author Rik <rik@octave.org>
date Sun, 11 Oct 2015 21:09:41 -0700
parents b3f56ed8d1f9
children
line wrap: on
line diff
--- a/scripts/statistics/distributions/poissinv.m	Sun Oct 11 20:33:37 2015 -0700
+++ b/scripts/statistics/distributions/poissinv.m	Sun Oct 11 21:09:41 2015 -0700
@@ -61,9 +61,8 @@
   inv(k) = Inf;
 
   k = (x > 0) & (x < 1) & (lambda > 0);
-
-  limit = 20;                           # After 'limit' iterations, use approx
-  if (! isempty (k))
+  if (any (k(:)))
+    limit = 20;                         # After 'limit' iterations, use approx
     if (isscalar (lambda))
       cdf = [(cumsum (poisspdf (0:limit-1,lambda))), 2];
       y = x(:);                         # force to column
@@ -75,11 +74,11 @@
       cdf = exp (-lambda(kk));
       for i = 1:limit
         m = find (cdf < x(kk));
-        if (any (m))
+        if (isempty (m))
+          break;
+        else
           inv(kk(m)) += 1;
           cdf(m) += poisspdf (i, lambda(kk(m)));
-        else
-          break;
         endif
       endfor
     endif
@@ -186,6 +185,7 @@
     y = lambda(k) .* r + log (sqrt (2*r.*((1-r) + r.*t)) ./ abs (r-1)) ./ t;
     inv(k) = floor (y - 0.0218 ./ (y + 0.065 * lambda(k)));
   endif
+
 endfunction