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

因此,我必须在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
,如果死亡是公平的话。我做错了什么?

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

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”。
非常感谢你。现在我明白了。我从来没有想到过这样的解决办法。非常感谢克里斯。现在我明白了。我从来没有想到过这样的解决办法。