模拟不公平的死亡

时间:2018-09-28 07:22:30

标签: 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);      %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。我在做什么错了?

2 个答案:

答案 0 :(得分:2)

如果您拥有统计信息(和机器学习)工具箱,请使用randsample并指定权重:

result = randsample(6, 5000, true, [.2 .2 .2 .2 .1 .1]);

检查:

histogram(result)

enter image description here

答案 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 ]