3

我必须在 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')
4

2 回答 2

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')

在此处输入图像描述

于 2012-12-14T17:10:08.603 回答
2

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

n=150;
ishead = randi([0,1],1,n);
plot(cumsum(ishead)./(1:n));
于 2012-12-15T10:19:45.147 回答