bernoulli,matlab上的几何模拟

时间:2014-09-29 11:46:09

标签: matlab statistics probability

我试图在matlab上模拟一个简单的bernuli模拟和一个简单的几何模拟,因为我是matlab的新手,看起来有点困难。 我一直用它来更好地理解它http://www.academia.edu/1722549/Useful_distributions_using_MATLAB 但到目前为止我还没能做出很好的模拟。有些人可以帮我或给我一个很好的教程。谢谢。

新编辑: 从这里回答: 这是我自己的asnwer,我试图与之合作是正确的:

如果我们想在Matlab中模拟伯努利分布,我们可以简单地使用随机数生成器rand来模拟伯努利实验。在这种情况下,我们尝试模拟掷硬币4次,p = 0.5:

>> p = 0.5;
>> rand(1,4) < p
ans =
     1     1     1     0

使用函数rand,它返回分布在0和1之间的值。使用“&lt; “,每个小于0.5的值都是成功的,因此它为该值打印1;对于等于或大于0.5的值是失败的,因此它为该值打印0 我们的答案是:1 1 1 0.这意味着3次我们的值小于0.5和1次我们的值大于或等于0.5。

2 个答案:

答案 0 :(得分:1)

从维基百科和您的链接,您可以自己回复问题:

二项分布是n个独立的是/否实验序列中成功次数(n)的离散概率分布。伯努利分布是二项分布的一个特例,n=1

function pdf = binopdf_(k,n,p)
    m = 10000;
    idx = 0;
    for ii=1:m
        idx = idx + double(nnz(rand(n,1) < p)==k);
    end
    pdf = idx/m;
end

例如,如果我扔了一个公平的硬币(p=0.5)20次,我会得到多少尾巴?

k = 0:20;
y_pdf = binopdf_(k,20,0.5);
y_cdf = cumsum(y_pdf);

figure;
subplot(1,2,1);
stem(k,y_pdf);
title('PDF');
subplot(1,2,2);
stairs(k,y_cdf);
axis([0 20 0 1]);
title('CDF');

如果您看到PDF,我们将看到的尾部平均值为10。

enter image description here

伯努利试验数X的几何分布概率分布需要一次成功。

function pdf = geopdf_(k,p)
    m = 10000;
    pdf = zeros(numel(k));
    for jj=1:numel(k)
        idx = 0;
        for ii=1:m
            idx = idx + double(nnz(rand(jj,1) < p) < 1);
        end
        pdf(jj) = idx/m;
    end
end

例如,我们需要多少次投掷一枚公平的硬币(p=0.5)以获得一条尾巴?

k = 0:20;
y_pdf = geopdf_(k,0.5);
y_cdf = cumsum(y_pdf);

figure;
subplot(1,2,1);
stem(k,y_pdf)
title('PDF');
subplot(1,2,2);
stairs(k,y_cdf);
axis([0 20 0 1]);
title('CDF');

如果您看到PDF,我们在第一次试验中有0.5次获得尾部的可能性,在前两次试验中获得尾部的可能性为0.75,等等。 enter image description here

答案 1 :(得分:1)

rand(1,n)&lt;假设1是头部,p将给出n个伯努利小径中的尾巴数。或者,您可以在MATLAB中使用binornd(n,p)函数来模拟n = 1的Bernoulli试验。一个小警告是使用rand(1,n)&lt;与binornd(n,p)相比,p非常快。