【问题标题】:Matlab Coin Toss SimulationMatlab抛硬币模拟
【发布时间】:2012-12-02 17:10:59
【问题描述】:

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

【问题讨论】:

    标签: matlab random plot percentage


    【解决方案1】:

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

    • 您应该按当前试用号索引t
    • 同样,percent_h 应该被相应地编入索引。这也应该预先分配。
    • 不确定z 应该代表什么...
    • 要制作情节,只需使用plotxlabel 会给 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')
    

    【讨论】:

    • 我想我必须阅读索引,因为我对此一无所知。我正在上编程课,他们只是把 Matlab 扔到了学期的最后几周。我正在尝试在此处添加更多信息,但似乎它不会让我这样做。我将编辑我的原始帖子。
    • 你应该除以 i,而不是试验
    • 我已经尝试过了,但我仍然得到奇怪的值。除以 i 我收到此错误消息“??? 使用 ==> horzcat CAT 参数尺寸不一致时出错。”我认为概率计算很好,因为这些值看起来会收敛到 0.5,但图表仍然是双曲线的。
    • 我会发布我的确切信息。可能已经改变了一些东西。我将使用最新的代码编辑 OP。
    • 我尝试了很多更改代码。有时使用 precent_h,有时使用 percent_h(i)。使用 OP 中的确切代码,但使用 percent_h(i) 这就是我所看到的:“试验次数、随机翻转、正面百分比???错误使用 ==> horzcat CAT 参数尺寸不一致。”跨度>
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-24
      • 2014-05-25
      • 2018-07-08
      • 1970-01-01
      • 2019-10-28
      • 2018-07-27
      • 2014-10-24
      • 1970-01-01
      相关资源
      最近更新 更多