While and for loops in MATLAB

  • #1
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!!
 

Answers and Replies

  • #2
Wrichik Basu
Insights Author
Gold Member
2020 Award
1,628
1,518
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.
 

Related Threads on While and for loops in MATLAB

Replies
3
Views
7K
Replies
1
Views
2K
Replies
1
Views
17K
  • Last Post
Replies
3
Views
3K
Replies
7
Views
893
Replies
1
Views
3K
Replies
12
Views
2K
  • Last Post
Replies
4
Views
24K
Replies
1
Views
2K
Top