probability of sum of dice rolling n times

24 views (last 30 days)
I have trouble with me homework.
so the problem is this: i have n fair dices with 6 sides that roll all together and i need to calculate the probability of sum of dices side.
i need to write script when:
function prob = sumDicePDF(n,k)
input: 1. number of dices(n >= 1) 2. k - integer number from n to 6n
output: probability
example: sumDicePDF(3,4) ans = 0.0139 sumDicePDF(8,20) ans = 0.0218
i need to use equalition: probability = sigma[1:6](P(sum(n-1) = k - i) * 1/6
and i forbiden to use recursion so my script run time must be near n^2
i understood the problem but i cant find a way to biuld the loop for counting probability so my answer be prob=(1/6)^n*sumOfCounting;
so my quastion is how to make loop to find sumOfCounting.
i wrote:
vec = ones(1,n - 1);
sumOfCounting = 0;
for i = 1:6
for j = 1:length(vec)
vec(j) = i;
sumOfvalue = sum(vec);
if k - sumOfvalue < 7 && k - sumOfvalue > 0
for m = 1:length(vec)
sumOfCounting = sumOfCounting + length(vec) + 1 - m;
end
end
end
end
but it not counting all options so where is the problem?
thank and best wishes.

Accepted Answer

Image Analyst
Image Analyst on 25 May 2013
Nice try, but why not just use the sum() function - that's what it's there for:
% Roll the dice "numberOfRolls" times
numberOfRolls = 200; % Number of times you roll all 6 dice.
n = 10; % Number of dice.
maxFaceValue = 6;
rolls = randi(maxFaceValue, n, numberOfRolls)
% Sum up dice values for each roll.
columnSums = sum(rolls, 1)
% Find out how many times each sum occurred.
edges = min(columnSums):max(columnSums)
counts = histc(columnSums, edges)
% Normalize
grandTotalSum = sum(counts(:))
normalizedCountSums = counts / grandTotalSum
bar(edges, normalizedCountSums, 'BarWidth', 1);
grid on;
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% Give a name to the title bar.
set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')
title('Frequency of Roll Sums', 'FontSize', 40);
  5 Comments
Image Analyst
Image Analyst on 30 May 2013
With lots of nested for loops, it doesn't look as efficient as mine, which I timed at 0.001 seconds, but whatever ... it's only 3 milliseconds (not noticeable at all) and it's your homework and if you understand yours better that's fine. At least I introduced you to a vectorized, fast way of doing it.
Ivan
Ivan on 30 May 2013
You write but, your code make use of randomize, and its note needed. Becouse player already rolled his dices and get the sum, and he asked what was the probability that would get it for example:
he rolled 5 dices and get 20, so he asked me what was probability to get 20 by rolling 5 dices, answer is: 0.0837.
List of probability's for 1 to 25 dices can be fount here: http://wizardofodds.com/gambling/dice/2/
Still worked on your code: (Made i little change):
function normalizedCountSums=testMine(n,k)
% Roll the dice "numberOfRolls" times
numberOfRolls = 200; % Number of times you roll all 6 dice.
%n = 10; % Number of dice.
maxFaceValue = 6;
rolls = randi(maxFaceValue, n, numberOfRolls);
% Sum up dice values for each roll.
columnSums = sum(rolls, 1);
% Find out how many times each sum occurred.
edges = min(columnSums):max(columnSums);
counts = histc(columnSums, edges);
% Normalize
grandTotalSum = sum(counts(:));
normalizedCountSums = counts(k) / grandTotalSum;
% bar(edges, normalizedCountSums, 'BarWidth', 1);
% grid on;
% % Enlarge figure to full screen.
% set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% % Give a name to the title bar.
% set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')
% title('Frequency of Roll Sums', 'FontSize', 40);
end
the output was:
>> feature accel off; tic; testMine(8,20) , toc; feature accel on;
ans =
0.0250
Elapsed time is 0.003182 seconds.
>> feature accel off; tic; testMine(8,20) , toc; feature accel on;
ans =
0.0300
Elapsed time is 0.001315 seconds.
Its Fast but the output is little wrong, it must be the same all the time = 0.0218
Maybe i wrote the problem not so good. but still thanks used it for other little program. :)

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!