我试图在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。
答案 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。
伯努利试验数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,等等。
答案 1 :(得分:1)
rand(1,n)&lt;假设1是头部,p将给出n个伯努利小径中的尾巴数。或者,您可以在MATLAB中使用binornd(n,p)函数来模拟n = 1的Bernoulli试验。一个小警告是使用rand(1,n)&lt;与binornd(n,p)相比,p非常快。