# what is the probability that when three dice are rolled, at least two of the dice have the same value? what is the probability that the value of the third dice roll is strictly between the values of the first two rolls? use simulation to estimate

6 views (last 30 days)

Show older comments

##### 6 Comments

Matthew Crema
on 8 Oct 2013

Edited: Matthew Crema
on 8 Oct 2013

I meant (lowercase) n.

So to get the simulation to work try:

n = 100000;

x = randi(6,n,1); % Value of the first dice

y = randi(6,n,1); % Value of the second dice

z = randi(6,n,1); % Value of the third dice

% Simulating throws

count1 = 0; % Count the number of times condition 1 occurs

for k = 1:n

if (x(k) == y(k)) || (y(k)==z(k)) || (x(k)==z(k))

count1 = count1 + 1;

end

end

fprintf('Condition 1 occured %d times ', count1)

fprintf('Out of %d throws\n', n)

fprintf('So according to this simulation, the probability is %.3f\n', count1./n)

Try it for a small value of "n". Then try it for a larger value of "n" to get a "feel" for the computational technique.

As far as your other question "how to solve it analytically" you are close. Do you know why? What you are doing is counting all possible outcomes of throwing 3 dice and putting that number (216) in the denominator. Then figure out how many of these possible outcomes have condition 1 satisfied (and put that number in the numerator). There are lots of methods for counting large numbers (factorials, permutations and combinations) that are not intuitive, but for this (relatively) small problem, it may be worth your time to draw a "tree" diagram to (again) get a "feel" for the analytical method and circle all outcomes where two or more dice have the same value.

Hope this helps.

### Answers (3)

James Tursa
on 8 Oct 2013

Edited: James Tursa
on 8 Oct 2013

You made a good first effort, so I will help you out.

First, rand produces a uniform distribution, not integers, so you need to adjust your x, y, and z formulas to turn them into integers with equal probabilities:

x = floor(1 + 6*rand(n,1));

etc.

Or look at randi as Walter has suggested.

As you have coded it, this condition only covers two of the possibilities:

if x(k)== y(k)|| y(k)==z(k)

But what about if the first value matches the third value? That is not covered by your test, so you should modify it to account for this possibility.

Also, this condition you have coded isn't quite correct:

if x(k) < z(k) && z(k) > y(k)

Plug in some sample values and you will see what I mean. Remember you will need to cover the case where x(k) is less than y(k) and also the case where x(k) is greater than y(k).

As to your general question of how to calculate probabilities, you simply count the number of successes and divide that by the number of trials. E.g., start two counters, one for the first test and one for the second test, at the front of your code before you enter the loops:

P = 0;

Q = 0;

Then, inside the first if test do P = P + 1, and inside the second if test do Q = Q + 1;

At the end of your code you can then do this to get the probabilities:

P = P / n; % probability of first condition being true

Q = Q / n; % probability of second condition being true

##### 0 Comments

Youssef Khmou
on 9 Oct 2013

Edited: Youssef Khmou
on 9 Oct 2013

##### 3 Comments

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!