Как указывалось , более внимательно рассмотрим использование randi()
. Из общего случая
X = randi([LowerInt,UpperInt],NumRows,NumColumns); % UpperInt > LowerInt
вы можете приспособиться к броску костей, например,
Rolls = randi([1 NumSides],NumRolls,NumSamplePaths);
. Обмен NumRolls
и NumSamplePaths
приведет к Rolls.'
или transpose(Rolls)
.
В соответствии с Законом о больших числах обновленное среднее значение выборки после каждого броска должно сходиться к истинному среднему значению ExpVal
(сокращение от ожидаемое значение ), по мере увеличения количества бросков (испытаний). Обратите внимание, что с увеличением NumRolls
среднее значение выборки сходится к истинному среднему значению. Изображение ниже показывает это для двух примерных путей.
Чтобы получить среднее значение выборки для каждого числа бросков кубиков, я использовал arrayfun()
с
CumulativeAvg1 = arrayfun(@(jj)mean(Rolls(1:jj,1)),[1:NumRolls]);
, что эквивалентно использованию совокупной суммы, cumsum()
, чтобы получить тот же результат.
CumulativeAvg1 = (cumsum(Rolls(:,1))./(1:NumRolls).'); % equivalent
% MATLAB R2019a
% Create Dice
NumSides = 6; % positive nonzero integer
NumRolls = 200;
NumSamplePaths = 2;
% Roll Dice
Rolls = randi([1 NumSides],NumRolls,NumSamplePaths);
% Output Statistics
ExpVal = mean(1:NumSides);
CumulativeAvg1 = arrayfun(@(jj)mean(Rolls(1:jj,1)),[1:NumRolls]);
CumulativeAvgError1 = CumulativeAvg1 - ExpVal;
CumulativeAvg2 = arrayfun(@(jj)mean(Rolls(1:jj,2)),[1:NumRolls]);
CumulativeAvgError2 = CumulativeAvg2 - ExpVal;
% Plot
figure
subplot(2,1,1), hold on, box on
plot(1:NumRolls,CumulativeAvg1,'b--','LineWidth',1.5,'DisplayName','Sample Path 1')
plot(1:NumRolls,CumulativeAvg2,'r--','LineWidth',1.5,'DisplayName','Sample Path 2')
yline(ExpVal,'k-')
title('Average')
xlabel('Number of Trials')
ylim([1 NumSides])
subplot(2,1,2), hold on, box on
plot(1:NumRolls,CumulativeAvgError1,'b--','LineWidth',1.5,'DisplayName','Sample Path 1')
plot(1:NumRolls,CumulativeAvgError2,'r--','LineWidth',1.5,'DisplayName','Sample Path 2')
yline(0,'k-')
title('Error')
xlabel('Number of Trials')