Matlab 模拟不公平的模具
因此,我必须在MATLAB中模拟一个不公平骰子的投掷,它有20%的概率显示1到4之间的每个面,10%的概率显示5到6之间的每个面。我必须生成5000个随机整数,代表掷骰子的结果。我还必须使用5000次重复试验打印出模拟的期望值和标准偏差 这是我在MATLAB中编写的代码:Matlab 模拟不公平的模具,matlab,random,Matlab,Random,因此,我必须在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
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
,如果死亡是公平的话。我做错了什么?如果您有统计(和机器学习)工具箱,请使用指定的权重:
result = randsample(6, 5000, true, [.2 .2 .2 .2 .1 .1]);
检查:
histogram(result)
如果您有统计(和机器学习)工具箱,请使用指定的权重:
result = randsample(6, 5000, true, [.2 .2 .2 .2 .1 .1]);
检查:
histogram(result)
这是一个比Luis'randsample更不通用的解决方案,但它非常简单,我希望能教会一些东西 由于你的概率都很好地四舍五入到10%,你可以将一个公平的10面骰子转换为不公平的6面骰子:
map = [1,1,2,2,3,3,4,4,5,6];
这张地图
将整数1-10转换为整数1-6,其中1-4都比5-6有两倍的机会被选中
现在绘制5000个随机整数1-10,并映射它们:
x = map(randi(10,1,5000));
与普通六面模具相比:
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 ]
与Luis的randsample相比,这是一个不太通用的解决方案,但它非常简单,我希望能教会一些东西 由于你的概率都很好地四舍五入到10%,你可以将一个公平的10面骰子转换为不公平的6面骰子:
map = [1,1,2,2,3,3,4,4,5,6];
这张地图
将整数1-10转换为整数1-6,其中1-4都比5-6有两倍的机会被选中
现在绘制5000个随机整数1-10,并映射它们:
x = map(randi(10,1,5000));
与普通六面模具相比:
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 ]
我已经有好几年没有接触matlab了,但是已经有一年了。您是在计算原始、正常模具的平均值和标准偏差,而不是装配模具的平均值和标准偏差。您将finitepmf称为哪里?sx,px,x在哪里传递?当我运行你的代码时,它会显示
未定义的函数或变量“pmf”。
我接触matlab已经好几年了,但是已经1年了。您是在计算原始、正常模具的平均值和标准偏差,而不是装配模具的平均值和标准偏差。您将finitepmf称为哪里?sx,px,x在哪里传递?当我运行你的代码时,它会显示未定义的函数或变量“pmf”。
非常感谢你。现在我明白了。我从来没有想到过这样的解决办法。非常感谢克里斯。现在我明白了。我从来没有想到过这样的解决办法。