Random Number Raffle Generator
Show older comments
Hi there,
Been a few years since I previously wrote any Matlab scripts so forgive me, and I also know there is quite a lot of topics already covering small parts of this, but I was hoping to collate them.
I am looking to create a simulation that firstly assigns a number of tickets "t" (each with a randomly generated number between two limits (ie 1 and 3000)) to the user. The simulation then runs a loop of 100000 iterations, where, during each iteration, the simulation should randomly generate one number between the two limits. The purpose of this being, everytime this random number (lets call it "Winning_ticket") matches one of the users tickets, a count increases.
I have got to a stage where I can get the script to assign me with ticket numbers, but cannot get it to check if the "Winning_ticket" is a member of my numbers. And it also doesnt count consequtively (it only produces a 0 or 1 as a result). Any help would be greatly appreciated!
The end goal is to automate this process for t=1 all the way to t=40, and then to graph the count of winning tickets.
num_runs = 100000;
max = 3000;
t = 5;
R = randperm(max,t);
Draw = zeros(1,num_runs);
count = 0;
for n = 1:num_runs
Winner(n) = randi([1 max]);
if ismember(Winner,R);
count = count + 1;
end
disp(count)
end
7 Comments
Rik
on 29 Jan 2021
What are you expecting ismember(R) to do? I would have to look up the documentation to see what it does with a single input.
In any case, ismember produces a logical array as output.
Why don't you reduce the number of iterations and the max value and step through your code to evaluate line by line what happens?
Callum McIntosh
on 29 Jan 2021
Edited: Callum McIntosh
on 29 Jan 2021
Rik
on 29 Jan 2021
Every for-loop can be edited to be a while loop:
for n=a:b:c
%code
end
n=a;
while n<c
%code
n=n+b;
end
Also, check the output of the ismember function. Did you check the documentation for if to see what it does with array inputs?
You are also checking the entire winner array in ismember, instead of only the current iteration.
Callum McIntosh
on 29 Jan 2021
Edited: Callum McIntosh
on 29 Jan 2021
Rik
on 29 Jan 2021
Your code uses this as the for syntax: for n = 1:num_runs. So n is n, a is 1, b is 1, and c is num_runs. You can change the condition as you please.
n=1;
while n<num_runs
%your code inside the for loop goes here
n=n+1;
end
I would strongly suggest taking a look at what value you're using as a condition here to make sure you're counting a win correctly. I would suggest doing that before you switch to a while loop.
Callum McIntosh
on 29 Jan 2021
Callum McIntosh
on 29 Jan 2021
Answers (0)
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!