Robert,
I think your use of I. in this way by first
generating the cumulative distribution is a huge take
away and I look forward to others using it for generating
discrete random variates besides Poisson such as binomial,
hypergeometric, negative binomial, etc.
However, there is a caveat about using I. ; it must
be used carefully. For example, consider the case of a
SINGLE binomial trial, sometimes called a Bernoulli
experiment, for which there is only the possibility of
failure (X=0) or success (X=1). The cumulative distribution
function is as follows.
0 if x<0
F(x) = 0.5 if 0<:x<1
1 if 1<:x
But look at how I. works in this case.
0 0.5 1 I. 0.01 0.25 0.51 0.991
1 1 2 2
According to the Dictionary, ?0 produces
0<Uvalues<1, so we need to use <:@I. here.
0 0.5 1 <:@I. 0.01 0.25 0.51 0.991
0 0 1 1
On Fri, 8 Aug 2008, Robert Cyr wrote:
+ poissonran=: 4 : 0
+ n=. 5*x
+ (+/\(^-x)**/\1,x%}.i.>:n)I.?y$0
+ )
+
+ It's really fast and accurate for integer values as long as the limit is
+ chosen sufficiently large to ensure that the last of the cumulated values is
+ 1.
+
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm