因此,我必须在MATLAB中模拟一个不公平骰子的抛掷,它有20%的概率显示1到4之间的每个面孔,而10%的概率显示5和6的每个面孔。生成5000个随机整数,代表掷骰子的结果。我还必须使用5000次重复试验打印出模拟的期望值和标准偏差。
这是我在MATLAB中编写的代码:
x=randi(6,1,5000); %Generate 5000 random values from 1-6
mean_x = mean(x); %Find expected value
std_x = std(x); %Find standard deviation
range_x = [1:6];
bar(range_x, pmf); %plot the pmf
xlabel('Value of face')
ylabel('Simulated probability mass function')
fprintf('The expected value is %4.2f\n',mean_x);
fprintf('The standard deviation is %4.2f\n', std_x);
function pmf=finitepmf(sx,px,x) %function that finds pmf
pmf=zeros(size(x(:)));
for i=1:length(x)
switch x(i)
case 1
px = 0.2;
case 2
px = 0.2;
case 3
px = 0.2;
case 4
px = 0.2;
case 5
px = 0.1;
case 6
px = 0.1;
end
pmf(i)= sum(px(find(sx==x(i))));
end
end
但是,如果死得很公平,我会得到相同的pmf
。我在做什么错了?
答案 0 :(得分:2)
如果您拥有统计信息(和机器学习)工具箱,请使用randsample
并指定权重:
result = randsample(6, 5000, true, [.2 .2 .2 .2 .1 .1]);
检查:
histogram(result)
答案 1 :(得分:2)
与Luis的randsample
相比,这是一种通用的解决方案,但它非常简单,我希望能教一些东西。
由于您的概率都很好地舍入到了10%,因此您可以将练习中的10面公平的骰子转换为6面不公平的骰子:
map = [1,1,2,2,3,3,4,4,5,6];
此map
会将1-10的整数转换为1-6的整数,其中1-4的几率比5-6翻倍。
现在绘制5000个1-10的随机整数,并将其映射:
x = map(randi(10,1,5000));
与6面模具比较:
y = randi(6,1,5000);
hx = hist(x,1:6);
hy = hist(y,1:6);
我知道:
hx = [ 988 1029 1022 967 505 489 ]
hy = [ 827 884 833 771 849 836 ]