Matlab:在生成具有特定概率分布的二进制数时的困惑

时间:2017-03-30 01:02:09

标签: matlab random

我想获得一个长度为N=10的二进制数组,其中0 = 0.6的概率和1的概率为0.4。但是,在验证实际上概率是否正确时,我得到的概率值不正确。因此,symbols是生成的0/1整数数组。然后我使用p_1 = sum(symbols==1)/length(symbols)检查概率是否正确。我哪里出错?

    N =10;
    p_0 = 0.6;% probability of zeros
  *for n = 1:N
         xr=rand;
         if xr<p_0
             symbols(n)=1;
         else
             symbols(n)=0;
         end
end

        p_1 = sum(symbols==1)/length(symbols)
        p_0 = 1-p_1*

2 个答案:

答案 0 :(得分:0)

如果要测试概率是否正确,请生成一个包含百万个值的数组。在10个随机值中,不可能知道潜在的概率是。

请注意,您可以在没有循环的情况下执行您正在执行的操作:

symbols = rand(N,1) > p_0;

(这会生成一个逻辑数组,+symbols将是一个数字数组。)

答案 1 :(得分:0)

我认为你的困惑在于理解概率,而不是在Matlab中。您正在使用内置函数rand,它在0..1之间生成统一分布式值。当您测试值小于某个阈值的假设时,您将生成新的分布。代码是正确的。

observations = rand(N, 1) > p_0

在您声明时,

会生成10的分布。当你增加N时,你会发现经验结果,

p_1 = sum(observations == 1)

始终接近0.4

的预期值