# While and for loops in MATLAB

I want to generate a Poisson distributed vector of random numbers, without any of the numbers being 0. The code I have is

k = poissrnd(kmean,1,N);
% where kmean is the mean of the distribution, and has been defined previously
%The above generates a N by 1 vector of Poisson distributed random numbers, with mean and variance kmean. N has also been defined previously.
%poissrnd is a command in newer versions of MATLAB

for i = 1:N
while k(i) == 0
k = poissrnd(kmean,1,N);
end
end

So basically if the vector of random numbers contains a 0, I want to redraw the vector.
The code doesn't work, and I can't seem to make it work. Can someone please give me some advice?

Thanks a lot!!

Wrichik Basu
Gold Member
2020 Award
What your code does is this: it checks each element in k, and if k[i] is 0, it continues to redraw k till k[i] is no longer 0. But how does k[i] ≠ 0 guarantee that k[i-1] ≠ 0? In other words, even though k[i] ≠ 0, some other element in k might have become 0. So you will have to recheck from the beginning. A better code is this:
Matlab:
for i = 1:N
if k(i) == 0
k = poissrnd(kmean,1,N);
i = 1;
end
end
Note that based on your value of kmean and the algorithm that Matlab uses, you might continue getting a 0 somewhere or the other. I am not sure of this, but it could, in principle, be possible.