Matlab硬币抛掷模拟

时间:2012-12-14 17:02:07

标签: matlab random plot percentage

我必须在Matlab中编写一些代码,模拟抛掷硬币150次。我必须计算硬币落在头上的次数,并创建一个矢量,给出头部的运行百分比。

然后我必须制作试验次数,随机“翻转”和头部运行百分比的表格。我假设随机“翻转”意味着该试验的正面或反面。

我还必须创建一个折线图,其中x轴为试验,y轴为概率(百分比)。我假设百分比只是获得头的百分比。

很抱歉,这篇文章很长。我现在提供详细信息将使我更容易看到我试图用代码做什么。我还没有创建表格或情节,因为我甚至不确定如何编码实际问题。

NUM_TRIALS = 150;
trials = 1:NUM_TRIALS;
heads = 0;
t = rand(NUM_TRIALS,1);
percent_h = zeros(size(t));

for i = trials

    if (t(i) < 0.5)
        heads = heads + 1;
        percent_h = heads./trials; 
    end   
end

flips = t;

disp('Number of Trials, Random flips, Heads Percentage')
disp([trials', flips, percent_h'])
plot(trials,percent_h)
title('Trial Number vs. Percent Heads')
xlabel('Trial number')
ylabel('Percent Heads')

2 个答案:

答案 0 :(得分:3)

您的代码实际上非常接近回答您的问题,但我看到了一些问题。

  • 您应该使用当前的试用号码对t进行索引。
  • 同样,percent_h也应相应编入索引。这也应该预先分配。
  • 不确定z应代表什么......
  • 要制作情节,只需使用plot即可。 xlabel将为x轴提供标签,ylabel为y轴。 title将给出情节的名称。
  • 你应该除以i,而不是试验。

所以,你的代码看起来应该是这样的。有很多方法可以简化它,但我会尽可能地保留你的代码。

NUM_TRIALS = 150;
trials = 1:NUM_TRIALS;
heads = 0;
t = rand(NUM_TRIALS,1);

percent_h=zeros(size(t));

for i = trials

    if (t(i) < 0.5)
        heads = heads + 1;
    end
    percent_h(i) = heads/i;  
end
plot(trials,percent_h)
xlabel('Trial Number')
ylabel('Percent Heads')
title ('Trial Number vs Percent Heads')

enter image description here

答案 1 :(得分:2)

你可以通过利用其他一些MATLAB函数来更简单地解决这个问题,正如@PearsonArtPhoto所暗示的那样。首先,您可以使用RANDI生成硬币投掷作为头部投掷。然后,您可以使用CUMSUM来获取累计头数。将此元素除以1:n可以得到累计分数。

n=150;
ishead = randi([0,1],1,n);
plot(cumsum(ishead)./(1:n));