Mercurial > octave-nkf
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