diff scripts/statistics/distributions/frnd.m @ 7032:4d4197ffb09d

[project @ 2007-10-15 16:31:55 by jwe]
author jwe
date Mon, 15 Oct 2007 16:31:55 +0000
parents a1dbe9d80eee
children 3306cfcb856e
line wrap: on
line diff
--- a/scripts/statistics/distributions/frnd.m	Mon Oct 15 15:31:21 2007 +0000
+++ b/scripts/statistics/distributions/frnd.m	Mon Oct 15 16:31:55 2007 +0000
@@ -78,16 +78,33 @@
 
 
   if (isscalar (m) && isscalar (n))
-    if ((m > 0) && (m < Inf) && (n > 0) && (n < Inf))
-      rnd = n ./ m .* randg(m/2,sz) ./ randg(n/2,sz);
+    if (isinf (m) || isinf (n))
+      if (isinf (m))
+	rnd = ones (sz);
+      else
+	rnd = 2 ./ m .* randg(m / 2, sz);
+      endif
+      if (! isinf (n))
+	rnd = 0.5 .* n .* rnd ./ randg (n / 2, sz); 
+      endif
+    elseif ((m > 0) && (m < Inf) && (n > 0) && (n < Inf))
+      rnd = n ./ m .* randg (m / 2, sz) ./ randg (n / 2, sz);
     else
       rnd = NaN * ones (sz);
     endif
   else
     rnd = zeros (sz);
 
-    k = find (!(m > 0) | !(m < Inf) |
-              !(n > 0) | !(n < Inf));
+    k = find (isinf(m) | isinf(n));
+    if (any (k))
+      rnd (k) = 1;
+      k2 = find (!isinf(m) & isinf(n));
+      rnd (k2) = 2 ./ m(k2) .* randg (m(k2) ./ 2, size(k2));
+      k2 = find (isinf(m) & !isinf(n));
+      rnd (k2) = 0.5 .* n(k2) .* rnd(k2) ./ randg (n(k2) ./ 2, size(k2));
+    endif
+
+    k = find (!(m > 0) | !(n > 0));
     if (any (k))
       rnd(k) = NaN;
     endif